zoukankan      html  css  js  c++  java
  • mongodb获取准确的行数

    背景:

             背景 一般来说,除了由于secondary延迟可能造成查询secondary节点数据不准以外,关于count的准确性问题,详情请见:https://developer.aliyun.com/article/704434

    一、现象:db.collection.count()不准确:

             MongoDB在分片后的集合上进行db.collection.count()操作时,出现结果不准确的现象,需要采用聚合的方法获取集合的count结果,在使用MongoDB-Java客户端做简单的插入操作(10W条)以后,使用Studio 3T查看插入结果时,发现显示的count结果与插入的数据不一致,偶然会多出几条或十几条,插入操作很简单,其中table3被分片

    发现问题后,通过在shell里面查询count,命令如下
    
    db.table3.count()

    二、原因:

    1. 操作的是分片的集合(前提);

    2. shard分片正在做块迁移,导致有重复数据出现;

    3. 存在孤立文档(因为不正常关机、块迁移失败等原因导致);

    三、解决方法:

           使用聚合aggregate的方式查询count数量,shell命令如下:

    db.collection.aggregate(
       [
          { $group: { _id: null, count: { $sum: 1 } } }
       ]
    )
    1. 同时追求效率和准确性,可以设置负载均衡窗口,在窗口以外禁止move chunk

    2. 强调数据准确性的场景,使用db.collection.aggregate()方法代替count

    3. 针对带谓词条件的count操作,将mongo版本升级到4.0以上

    4. 针对出现大量孤立文档的情况,做孤立文档清理

    ##############################################################

  • 相关阅读:
    python RabbitMQ队列/redis
    python 协程
    Python 线程
    Python Socket网络编程
    Python 面向对象编程进阶
    Python 面向对象
    python 模块
    Python 迭代器&生成器&装饰器
    Python 集合操作
    Java多态--构造方法的内部方法多态
  • 原文地址:https://www.cnblogs.com/igoodful/p/13958882.html
Copyright © 2011-2022 走看看