您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> 其他数据库 >> 疑似MongoDB数据丢失问题

疑似MongoDB数据丢失问题

来源:网络整理     时间:2018/1/26 1:25:06     关键词:

关于网友提出的“ 疑似MongoDB数据丢失问题”问题疑问,本网通过在网上对“ 疑似MongoDB数据丢失问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 疑似MongoDB数据丢失问题
描述:

使用MongoDB进行数据插入,发现存在数据丢失问题。

集群环境:五台windows server2008服务器,配备五个shard,模式为一主一从一仲裁。

场景描述:现有约4000w数据,大小为62G(图片数据),使用MongDB C# Driver提供的IMongoCollection接口的insertMany方法批量插入,每次大概100条,程序的写入模式已经配置为WriteConcern.Acknowledge,并且开启了journal,InsertMany处也是用try捕捉了异常,最终执行结果是未捕捉到异常。程序执行完成后,发现缺少部分数据。

程序解析到的数据量为39821308条,而mongoDB数据库中统计到的数量为39804543。

有大牛能帮忙分析解释一下吗,分析了一周左右,实在是没有头绪。


解决方案1:

因为做MongoDB相关服务,隔三差五就会被疑似丢失一回,不过目前为止都没有哪一个是真的丢失的。
如果有十足的把握没有代码上的问题,大部分人遇到的情况可能有以下几种:

非正常关闭后count结果不正确:Accuracy after Unexpected Shutdown;

After an unclean shutdown of a mongod using the Wired Tiger storage engine, count statistics reported by count may be inaccurate.

在Sharding环境中count结果不准确:Behavior

On a sharded cluster, count can result in an inaccurate count if orphaned documents exist or if a chunk migration is in progress.

你上面提到:

程序解析到的数据量为39821308条,而mongoDB数据库中统计到的数量为39804543。

因为程序和shell中返回的数据应该是一样的,所以你可能是上述第二种可能性。要得到准确的数值需要用照文档中所述使用aggregation统计正确的结果。

补充

基于你提到的情况,另外一些可能导致数据缺失的情况:

  1. 是否在大批量插入数据时压力超过极限导致结点发生过主从切换?可以观察日志中是否有出现过PRIMARY, SECONDARY等关键字来确定是否发生过切换。
  2. 默认情况下写入操作使用w=1,是否有修改过默认行为?
  3. 还有一种很少见但是确实在实际中遇到过的情况,是否插入的数据又被删除了?可以在local.oplog.rs中查找是否有出现过缺少的文档的_id来确定这一点。
解决方案2:

检查下数据是否被覆盖写入了。


以上介绍了“ 疑似MongoDB数据丢失问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/4535473.html

相关图片

相关文章