【问题标题】:Mongoose insertMany limitMongoose insertMany 限制
【发布时间】:2016-07-02 18:19:00
【问题描述】:

Mongoose 4.4 现在有一个insertMany 函数,可让您验证一组文档,如果有效,则只需一次操作即可插入它们,而不是每个文档一个操作:

var arr = [{ name: 'Star Wars' }, { name: 'The Empire Strikes Back' }]; Movies.insertMany(arr, function(error, docs) {});

如果我有一个非常大的数组,我应该批量处理这些吗?还是对大小或数组没有限制?

例如,我想为每部电影创建一个新文档,我有 10,000 部电影。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    The method 获取该数组并开始通过 MongoDB 中的 insertMany 方法插入它们,因此数组本身的大小实际上取决于您的 machine can handle 的大小。

    但请注意,还有一点,不是限制,而是值得考虑的一点,关于 MongoDB 如何处理多个操作,默认情况下它一次处理一个 batch of 1000 operations 并拆分更多内容。

    【讨论】:

      【解决方案2】:

      我建议根据个人经验,批量 100-200 可以为您提供良好的性能组合,而不会对您的系统造成压力。

      insertMany 操作组最多可以有 1000 个操作。如果一个组超过了这个限制,MongoDB 会将该组分成 1000 人或更少的更小的组。例如,如果队列包含 2000 个操作,MongoDB 会创建 2 个组,每个组有 1000 个操作。

      大小和分组机制是内部性能细节,在未来版本中可能会发生变化。

      在分片集合上执行操作的有序列表通常会比执行无序列表慢,因为对于有序列表,每个操作都必须等待前一个操作完成。

      【讨论】:

      • 这不是最新的 - 从 v3.6 开始批量大小为 100,000
      【解决方案3】:

      Mongo 3.6 更新:

      insertMany() 的限制为从 1000100,000increased in Mongo 3.6。 这意味着现在,100,000 操作之上的组将相应地分成更小的组。 例如:具有200,000操作的队列将被拆分,Mongo将创建2组100,000

      【讨论】:

      • 我尝试一次添加 50000,但很遗憾它很慢。我尝试了 1000,它更快。
      • @AshokDey,我从来没有说过它会更快 :) 永远不会更少 - 这可能取决于您机器的类型(RAM 量,磁盘写入等......)。您是否使用async/await 将数据发送到不同的服务器?这也可能导致它变慢。
      • 啊.. 好像我忘了粘贴 Github 仓库的 URL,这里是:github.com/ashokdey/scale 你可以在自述文件中了解用例,我很高兴看到你合作者。对于我的用例,与一次插入 50k 相比,它更快。
      • 文档的总大小是否也有限制?
      • @KaliCharan 是的,根据 MongoDB 的官方文档,每个文档的大小限制为 16MB,请参见此处:docs.mongodb.com/manual/reference/limits 您可以增加大小限制(参见相同的链接),但对于存储如此大的文档MongoDB 可能不是最佳选择,您宁愿使用某种云存储(S3、GCS 等...)。
      猜你喜欢
      • 1970-01-01
      • 2018-12-29
      • 2021-01-09
      • 2021-12-10
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-27
      相关资源
      最近更新 更多