使用MongoDB进行数据插入,发现存在数据丢失问题。
集群环境:五台windows server2008服务器,配备五个shard,模式为一主一从一仲裁。
场景描述:现有约4000w数据,大小为62G(图片数据),使用MongDB C# Driver提供的IMongoCollection接口的insertMany方法批量插入,每次大概100条,程序的写入模式已经配置为WriteConcern.Acknowledge,并且开启了journal,InsertMany处也是用try捕捉了异常,最终执行结果是未捕捉到异常。程序执行完成后,发现缺少部分数据。
程序解析到的数据量为39821308条,而mongoDB数据库中统计到的数量为39804543。
有大牛能帮忙分析解释一下吗,分析了一周左右,实在是没有头绪。
因为做MongoDB相关服务,隔三差五就会被疑似丢失一回,不过目前为止都没有哪一个是真的丢失的。
如果有十足的把握没有代码上的问题,大部分人遇到的情况可能有以下几种:
非正常关闭后count结果不正确:Accuracy after Unexpected Shutdown;
在Sharding环境中count结果不准确:Behavior
你上面提到:
因为程序和shell中返回的数据应该是一样的,所以你可能是上述第二种可能性。要得到准确的数值需要用照文档中所述使用aggregation统计正确的结果。
补充
基于你提到的情况,另外一些可能导致数据缺失的情况:
local.oplog.rs
中查找是否有出现过缺少的文档的_id
来确定这一点。