MongoDB中用于大型集合的批量插入性能

mic*_*bsp 14 performance insert mongodb mongodb-java

我正在使用BulkWriteOperation(java驱动程序)以大块存储数据.起初它看起来工作正常,但是当集合的大小增加时,插入可能需要花费很多时间.

目前,对于20M文档的集合,1000个文档的批量插入可能需要大约10秒.

有没有办法使插入独立于集合大小?我没有任何更新或upsert,它总是我插入的新数据.

从日志来看,锁似乎没有任何问题.每个文档都有一个索引的时间字段,但是它呈线性增长,因此我认为没有必要让mongo花时间重新组织索引.

我很想听听一些提高性能的想法

谢谢

gly*_*ing 5

您认为索引不需要任何文档重组,并且您描述索引的方式表明右手索引是可以的。因此,索引似乎被排除在外。您当然可以 - 如上所述 - 通过删除索引并重新运行批量写入来明确排除这种情况。

除了索引,我会……

  • 考虑您的磁盘是否可以跟上您要保留的数据量。Mongo 文档中有关此的更多详细信息
  • 使用分析来了解您的写入发生了什么


小智 5

  1. 您的收藏中有索引吗?如果是,则建立索引树需要时间。
  2. 数据是时间序列的吗?如果是,请多使用更新而不是插入。请阅读此博客。该博客建议就地更新比插入更有效(https://www.mongodb.com/blog/post/schema-design-for-time-series-data-in-mongodb
  3. 你有能力设置分片集合吗?如果是,它会减少时间(在 3 个分片服务器上测试,有 1500 万条 ip 地理条目记录)