Mongo删除和插入vs更新

时间:2015-02-10 17:08:54

标签: mongodb mongodb-query

我使用的是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将保持不变。

2 个答案:

答案 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