<span>mongodb获取准确的行数</span>

 

背景:

         背景 一般来说,除了由于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. 针对出现大量孤立文档的情况,做孤立文档清理

 

 

 

 

 

 

 

 

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 15:41
已编辑
淘天 算法工程师 31.0k*16.0
点赞 评论 收藏
分享
沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务