我正在使用匹配进行集合中记录的聚合,时间间隔为五分钟,如下所示
{ "$match" : { "timestamp" : { "$gt" : 1460953500000 , "$lte" : 1460953800000})
脚本以
的时间间隔运行10:01, (interval will be 9:55 to 10:00)
10:06, (interval will be 10:00 to 10:05)
运行上面的匹配查询后,我得到不同的计数。 文件计数经过一段时间后更改为1-2分钟 例如,我在集合中运行count的查询
查询点击时间
10:01:05
db.xxx.count({ "timestamp" : { "$gt" : 1460953500000 , "$lte" : 1460953800000})
Count : 44350
10:01:015
db.xxx.count({ "timestamp" : { "$gt" : 1460953500000 , "$lte" : 1460953800000})
Count : 44578
10:01:40
db.xxx.count({ "timestamp" : { "$gt" : 1460953500000 , "$lte" : 1460953800000})
Count : 44830
此次向前计数变得稳定。
我找到了这个 https://docs.mongodb.org/manual/core/journaling/#journal-process 日记流程
使用日记功能,MongoDB的存储层有两个数据集内部视图:私有视图,用于写入日志文件,以及共享视图,用于写入数据文件:
- MongoDB首先将写操作应用于私有视图。
然后,MongoDB大约每100毫秒将私有视图中的更改应用于日志目录中的磁盘日志文件。 MongoDB将批处理中的写操作记录到磁盘日志文件中,称为组提交。对提交进行分组有助于最大限度地降低日记记录对性能的影响,因为这些提交必须在提交期间阻止所有编写者。写入日志是原子的,确保磁盘日志文件的一致性。有关提交间隔频率的信息,请参阅storage.journal.commitIntervalMs。
在日记帐提交时,MongoDB会将日记中的更改应用到共享视图。
- 醇>
最后,MongoDB将共享视图中的更改应用于数据文件。更确切地说,默认间隔为60秒,MongoDB要求操作系统将共享视图刷新到数据文件。操作系统可以选择以高于60秒的频率将共享视图刷新到磁盘,尤其是在系统可用内存不足的情况下。要更改写入数据文件的时间间隔,请使用storage.syncPeriodSecs设置。
这是计数差异的原因吗?我正在使用mongodb 3.2 请帮我找到稳定的计数结果。
答案 0 :(得分:0)
你自己找到了答案。要检查其工作和记录计数如何等待使用此命令写入磁盘:
db.runCommand( { serverStatus: 1 } )