【问题标题】:Performance implications of db.collection.insert vs db.collection.insertOne & db.collection.insertManydb.collection.insert 与 db.collection.insertOne 和 db.collection.insertMany 的性能影响
【发布时间】:2016-05-30 10:15:43
【问题描述】:

我正在使用 NodeJs 的 mongodb 驱动程序,里面有 3 个方法:

1) db.collection.insert

2) db.collection.insertOne

3) db.collection.insertMany

我发现 db.collection.insert 可以完成 insertOne 和 insertMany 的工作。

我也找到了相同的删除和更新方法。

相对于 db.collection.insertOne 和 db.collection.insertMany 方法调用 db.collection.insert 方法是否会对性能产生影响?

可以肯定地假设我正在一个集合中工作,该集合将在某个时间点拥有数百万条记录。

【问题讨论】:

标签: node.js mongodb


【解决方案1】:

有一些细微的差别:

所以这取决于您选择哪种访问模式。通常,为了提高性能,如果您必须添加多个文档,请尝试仅进行 1 次调用(insert()insertMany())并使其无序(如果可能从应用程序的角度来看)。如果是关于是否应该使用(insert()insertMany())的问题,则取决于您是否需要 explain() 或生成的 objectIds,但在性能方面没有区别(如果您键入:db.yourCollection.insert 或 @987654346 @(没有())你会看到两者都执行bulk.insert(obj)

TL;DR:

【讨论】:

    【解决方案2】:

    当对 30 个文档执行操作时,使用带有 ma​​ny 选项的插入/更新更有效:

    1. 服务器有一次调用
    2. 服务器引擎进程无需等待新数据即可工作

    因此减少往返、网络开销并允许 db 引擎一次处理所有文档与通过客户端调用插入/更新的所有文档循环相比具有列出的优势

    【讨论】:

    • 我正在尝试评估是否可以互换使用 insert 和 insertmany 方法,我不会一一更新它们..
    【解决方案3】:

    性能测试

    • 3.7k x 50000 数据
    • 尝试考虑相同的条件
    • Meteor 驱动为 Fiber 封装了 Node 驱动来写代码

    节点驱动测试

    • 节点驱动 insertMany 异步 + Promise 同步:10~11 秒
    • 节点驱动 insertMany 异步:13~15 秒
    • 异步插入节点驱动程序:20~23 秒

    流星驱动测试

    • 流星驱动插入异步:24~27 秒
    • 流星驱动插入同步:43-49 秒

    结论

    • insertMany 比 insert 快得多
    • Promise + await 比异步更快
      • 无法解释。有什么想法吗?
    • 流星同步功能对于批量插入很慢

    【讨论】:

      【解决方案4】:

      在我的测试中,insert_one()insert_many() 在性能方面存在 10 倍 的差异。

      我正在使用 Python 3.9 和 MongoDB 5.0,我将 ~5M 行/~500MB 的 CSV 文件的每一行作为一个文档插入到 MongoDb 集合中。它产生了一个 4.8GB 的​​集合,根据 MongoDB Compass 的报告,每个文档大约 1KB。

      花了:

      • 3048s 与insert_one()
      • 301s 和 insert_many(),每批 1000 行
      • 291s 和 insert_many(),每批 5000 行
      • 273s 和 insert_many(),每批 10,000 行

      【讨论】:

        猜你喜欢
        • 2011-04-15
        • 1970-01-01
        • 1970-01-01
        • 2018-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多