码迷,mamicode.com
首页 > 数据库 > 详细

关于MongoDB精确统计文档记录数的问题

时间:2020-08-17 17:01:03      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:执行   header   分数   操作   alt   统计   sql   cti   问题   

1.问题背景

最近测试用mongoshake工具做MongoDB数据迁移,mongoshake在迁移完成提供了一个脚本comparison.py来做数据校验,在校验过程中发现结果比对存在一个库数据不一致,下意识以为mongoshake存在缺陷导致迁移丢数据,理论上这种基础功能不应该存在错误,多次重新迁移均出现相同的问题.
技术图片
技术图片

2.问题分析

通过对comparison.py脚本的分析,了解到对数据的统计有3种模式

  • --comparisonMode=no 表示使用统计信息比对记录数
  • --comparisonMode=sample 表示只统计采样部分数据看是否一致,采样的数据由--count参数控制
  • --comparisonMode=all 表示分批次对比所有的文档是否一致(非常慢)
    技术图片

也就是当采用comparisonMode=no和comparisonMode均不能精确的对比出数据的一致性,如果统计信息都是最新的,那基本没问题,如果统计信息不一致,则很难保证数据校验的正确性,必须采用comparisonMode=all的模式做校验

3.关于MongoDB中如何精确统计记录数的问题

在这之前一直以为MongoDB提供的count命令和Oracle,MySQL等数据库类似,是精确的查询集合包含多少个文档记录,实际上MongoDB的count操作仅仅是获取统计信息的值,MongoDB官方文档也有描述
技术图片

如果需要精确的统计每个集合的文档数,需要执行db.collections.countDocuments({})操作
技术图片

以下是一个主从环境统计信息不一致的示例,从图中可以看到,通过count统计的数据量和通过查看集合的stats信息查看到的是一致的,主从存在明显的数据量不一致的情况,而通过db.collections.countDocuments({})则能精确查询出该集合的记录数.
技术图片

关于MongoDB精确统计文档记录数的问题

标签:执行   header   分数   操作   alt   统计   sql   cti   问题   

原文地址:https://www.cnblogs.com/zhenxing/p/countDocuments.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!