3

您将如何处理批量/批量更新文档(最多 10k 文档)以及forEach?(没有具体的更新标准,用于随机文档选择)

我正在考虑两个选项:

  1. _id将闭包中的所有文档收集forEach到一个数组中,然后使用 collection.update({_id : {$in : idsArray}}, ...)
  2. 将闭包中的更新查询添加forEach到批量操作并在完成后执行,类似于 bulk.find({_id: doc.id}).updateOne({...}); bulk.execute();

我很快就会对此进行基准测试,但我想知道什么是更高效的 I/O 并且被认为是 Mongo 的“智能”。

4

1 回答 1

3

好的,所以我对这两个选项进行了基准测试。

TL;DR 选项一的速度是原来的两倍,所以收集 id 并更新一次。

以供将来参考,更多详细信息:

  • db 中的文档总数约为 500k。
  • 每个文档包含大约 20-25 个字段。
  • 更新了 10-30k 个文档。

结果(时间因机器而异,但重要的是相对差异):

  1. ids 数组的一次更新:200-500 毫秒。
  2. 批量更新:600-1000 毫秒。

回想起来,我认为批量可能会更快,因为可能存在一些隐藏的优化。但我知道这个问题缺少逻辑,更少的操作可能意味着更快,因此批量更慢。

于 2016-06-29T15:45:04.200 回答