我正在使用BulkWriteOperation(java驱动程序)以大块存储数据。起初它看起来工作正常,但是当集合的大小增加时,插入可能需要花费很多时间。
目前,对于20M文档的集合,1000个文档的批量插入可能需要大约10秒钟。
有没有办法让插件独立于集合大小? 我没有任何更新或upsert,它总是我插入的新数据。
从日志来看,锁似乎没有任何问题。 每个文档都有一个被索引的时间字段,但是它呈线性增长,因此我认为没有必要让mongo花时间重新组织索引。
我希望听到一些提高性能的想法
谢谢
答案 0 :(得分:4)
您认为索引不需要任何document reorganisation,并且您描述索引的方式表明right handed index是可以的。因此,索引似乎被排除在外。你当然可以 - 如上所述 - 通过删除索引并重新运行批量写入来明确地排除这一点。
除了索引,我还是......
答案 1 :(得分:3)
答案 2 :(得分:1)
磁盘利用率& CPU:检查磁盘利用率和CPU,看看是否有最大值。 显然,它应该是导致此问题的磁盘。
Mongo日志: 此外,如果1000个批量查询占用10秒,则检查mongo日志是否在1000个批量中有任何花费时间的插入。如果有任何此类查询,那么您可以缩小分析范围
另一件不清楚的事情是Mongo实例上发生的查询顺序。是插入发生的唯一操作还是还有其他查找运行的查询?如果是,那么你应该考虑扩大任何资源的最大限度。