【问题标题】:mongoDB bulkWrite bad performencemongoDB bulkWrite 性能不佳
【发布时间】:2021-04-25 16:59:09
【问题描述】:

我的 MongoDB 集合包含大约 1000 万个文档

我尝试更新(upsert)大约 2500~ 个文档,每次更新大约 1K

我尝试将 bulkWrite 与 order=false 一起使用。 大约需要 10 秒,每个文档大约需要 3-4 毫秒。

所以我尝试通过 updateOne 插入 2500~ 个文档(迭代模式) 我测量了每个文档的平均时间,每次更新大约需要 3.5 毫秒。

为什么我的 bulkWrite 没有得到更好的结果,我该如何改进 bulkWrite 的更新时间?

带有 1 个文档的 bulkUpdate 示例:

    db.collections.bulkWrite( [
   { updateOne :
      {
         "filter": {"Name": "someName", "Namespace" : 
         "someNs", "Node" : "someNode" , "Date" : 0},
         "update": {"$addToSet" : {"Data" :{"$each" : ["1", , "2"]}}},           
         "upsert": true
      }
   }
] )

文档示例:

{
  "Name": "someName",
  "Namespace": "someNs",
  "Node": "SomeNode",
  "Date": 23245,
  "Data" : ["a", "b"]
}

我有一个复合索引,其中包含:名称、命名空间、节点、日期。

当我尝试查找文档时,我得到了很好的结果

【问题讨论】:

  • 一般来说,更新查询可以从查询过滤字段上的索引中受益(在性能方面)。它可以是单个字段或复合索引。

标签: mongodb mongodb-query


【解决方案1】:

TL 博士;调整批量大小以找到最佳位置。

批量写入或 updateMany 将比单个更新更快。仅仅因为发生的喋喋不休(更少的往返)。传输的数据量完全相同。

您需要做的是根据您的网络、集群配置等找到一个可以提供最高吞吐量的最佳数量。

通常您会看到,如果批量较小,则说明您没有使用该功能。如果它太大,那么您将花费太多时间将包传输到数据库。

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多