Mongo批量替换为200k以上的操作



例如,我在集合中有这样的文档:

{
"key": "key1",
"time": 1000,
"values": [] // this one is optional
}

我需要通过修改或删除values列来更新CSV文件中的集合,其中key&CCD_ 3是滤波器。

到目前为止我尝试过的:

  • DeleteMany(带有or(and(key: key1), and(time: time2)),…还有276k个or参数)+InsertMany带有276k个文档=>~90秒
  • 批量将One替换为(filter: and(key: key1, time: time2))=>~40秒
  • 将巨大的批量拆分为几个较小的批次(7500似乎是最具性能的),但就db操作而言,这一批次不是原子性的=>~35秒

备注:

  • 所有测试都使用bulk.ordered = false来提高性能
  • 存在唯一索引key: 1, time: -1

是否有可能优化此类请求?我知道Mongo可以爆发到大约80k插入/秒,但替换呢?

批量操作不是提交组的原子操作。只有个别操作是原子操作。还要注意的是,如果您提交的批量操作超过一定数量(不使用加密时为1000),驱动程序会自动将批量操作拆分为较小的批次,这就是为什么大批量操作的性能往往比1000以下的批次差。

回答您的性能问题:

  • 使用tmpfs为存储创建一个测试部署
  • 了解此部署每秒可以支持多少查询
  • 了解此部署每秒可以维持多少次更新
  • 如果每秒更新的次数大约是每秒查询次数的一半,那么您可能正在以最大效率运行

使用SSD和磁盘备份存储,性能自然会降低。内存测试的目的是确保尽可能高效地使用数据库。

特别是在混合读写工作负载的情况下,如果您使用磁盘,切换到SSD存储应该会显著提高性能。

相关内容

  • 没有找到相关文章

最新更新