【问题标题】:Mongodb/Mongoose bulkwrite(upsert) performance issuesMongodb/Mongoose bulkwrite(upsert) 性能问题
【发布时间】:2021-07-06 18:33:27
【问题描述】:

我在我们的 Nodejs api 中使用 mongoDB 和 mongoose,我们需要为数据源是 JSON 的集合做某种种子,我正在使用 Model.bulkwrite,它在内部使用 mongodb 的 Bulkwrite(https://docs.mongodb.com/manual/core/bulk-write-operations)。 代码如下,

await Model.bulkWrite(docs.map(doc => ({
    updateOne: {  ..... } // update document
    insertOne: { ....... } // insert document
    updateOne: {  ..... } // update document
    insertOne: { ....... } // insert document
    .
    .
    .n
})))

这适用于我们当前只有几百个文档的用例, 但是我们担心它会如何扩展,当文档数量增加很多时它的性能,比如当文档数量达到 10000 时会有什么问题。 只是想确认我们是否走在正确的道路上,或者是否有任何改进的余地。

【问题讨论】:

    标签: node.js mongodb performance mongoose nosql


    【解决方案1】:

    Mongodb 中的 Bulkwrite 目前在单个批次中的最大限制为 100,000 次写入操作。来自文档

    每组的操作数不能超过数据库的maxWriteBatchSize的值。从 MongoDB 3.6 开始,此值为 100,000。该值显示在 isMaster.maxWriteBatchSize 字段中。

    此限制可防止出现过大错误消息的问题。如果一组 超过此限制,客户端驱动程序将组划分为更小的 计数小于或等于限制值的组。为了 例如,maxWriteBatchSize 值为 100,000,如果队列 由 200,000 个操作组成,驱动程序创建 2 个组,每个组具有 100,000 次操作。

    因此,在超出此限制之前,您不会遇到任何性能问题。

    供您参考:

    【讨论】:

    • 首先,非常感谢,是的,我知道这些限制,并且我已经阅读了文档,但是 mongoDB 文档中还有一部分关于批量操作 (docs.mongodb.com/manual/reference/method/Bulk/…) 说操作的限制是 1000,我在某处读到,由于这个检查这个视频,人们几乎没有遇到同样的问题 (youtube.com/watch?v=mX_BJ8d2ntM),现在我尝试在我们的环境中测试我的解决方案,用于近 2k 个文档它运行良好(需要 20-30 秒)并且没有遇到任何问题。
    • 是的,Mongodb bulk 的限制较小。在问题中有bulkwrite被使用,所以我只回答了bulkwrite。
    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 2011-10-09
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    相关资源
    最近更新 更多