我使用的是mongo 3.0版db和java驱动程序。我收集了超过100,000个条目。每天将有大约500个更新和大约500个插入,这应该批量完成。我将获得旧字段的更新文档以及我必须存储的一些新字段。我不知道哪些领域是新添加的,每个领域我都在维护摘要统计。由于我不知道有什么变化,我将需要获取已经存在的记录,以查看更新的和新的记录之间的差异,以便适当地设置汇总统计数据。所以我想要了解如何有效地完成这些工作。
我应该删除现有记录并重新插入,还是应该更新500条记录。如果它有潜在的优势,我应该考虑做1000个激活。
示例UseCase 初始记录包含:f = [185,75,186]。对于同一记录,我将获得更新请求,如f = [185,75,186,1,2,3]。此外,上面提到的汇总统计数据存储了f中的ID计数。因此,1,2,3的计数将增加,而185,75,186将保持不变。
答案 0 :(得分:0)
如果文档不存在,则使用Upserts添加文档。因此,如果您期望新文档,那么请设置{upsert: true}
。
为了更新您的统计信息,我认为最简单的方法是在mongo
(例如使用聚合框架)中重做统计信息。如果你正确索引你的文件,它应该没问题。我假设您的统计信息更新是脱机操作。
如果您没有在mongo
中执行统计信息,那么您可以添加另一个collection
,您可以在其中保存更新以及旧字段(当然您也会更新当前集合),因此您将知道白天哪些文件发生了变化。在一天结束时,您可以在提取所需信息后删除此临时/日志collection
。
答案 1 :(得分:0)
Mongo使用本地数据库中的oplog.rs上限集合维护每个更改日志。我们在时间戳的基础上在oplog.rs上创建了一个tailable游标,db / collection中的每个更改都是通过流式传输的。相信这是识别mongo变化的最佳方法。人们当然可以放弃没有兴趣的文件变更。 进一步阅读http://docs.mongodb.org/manual/reference/glossary/#term-oplog