我有JSON格式的数据,其中包含要插入MongoDB数据库的数百万条记录。我创建了一个JAVA程序,该程序读取JSON文件,对其进行解析,然后使用<div class='gra left'></div>
<div class='gra right'></div>
方法将其批量插入到MongoDB集合中。每个批量插入包含10000个文档。该文档的平均大小为13 kB。在向集合中插入大约30万个文档之后,插入的性能逐渐开始下降。除了MongoDB提供的默认索引外,集合上没有索引。
我查看了mongod.log来诊断问题,看起来在该集合包含约300 000个文档之后,随后的每个大容量插入都会在整个集合上产生一个带有COLLSCAN的聚合命令。收集了300万份文档后,COLLSCAN花费了大约30秒钟。批量插入操作本身的时间不会改变,平均为200 ms / 10000文档。
可以从以下位置找到MongoDB的完整日志文件:https://pastebin.com/STDZTJJU
以下JSON输出是从mongod.log文件提取的每个插入之后执行的聚合命令的示例。在这里COLLSCAN花了6秒钟以上。
有什么我能做的避免每次批量插入后进行集合扫描的事情吗?
insertMany()