我正在使用Java Driver查询MongoDB实例并且读取性能很差。我的表格不是特别大,有大约30米的记录。我一直在尝试不同大小的查询,我没有在合理的时间内返回200k以上的任何东西,200k需要大约5-10分钟。
MongoDB记录查询:
2017-12-15T01:13:10.877 + 0000 I COMMAND [conn3]命令db.events命令:getMore {getMore:23973717840,collection:“events”,batchSize:10000} originatingCommand:{find:“events”, filter:{id:{$ in:[]}},batchSize:10000} planSummary:IXSCAN {id:1} cursorid:23973717840 keysExamined:10000 docsExamined:10000 fromMultiPlanner:1 numYields:79 nreturned:10000 reslen:7280007 locks:{全局:{acquireCount:{r:160}},数据库:{acquireCount:{r:80}},集合:{acquireCount:{r:80}}}协议:op_query 124ms
2017-12-15T01:13:14.214 + 0000 I COMMAND [conn3]命令db.events命令:getMore {getMore:23973717840,collection:“events”,batchSize:10000} originatingCommand:{find:“events”, filter:{id:{$ in:[]}},batchSize:10000} planSummary:IXSCAN {id:1} cursorid:23973717840 keysExamined:10001 docsExamined:10000 fromMultiPlanner:1 numYields:79 nreturned:10000 reslen:7240971 locks:{全局:{acquireCount:{r:160}},数据库:{acquireCount:{r:80}},集合:{acquireCount:{r:80}}}协议:op_query 114ms
2017-12-15T01:13:18.646 + 0000 I COMMAND [conn3]命令db.events命令:getMore {getMore:23973717840,collection:“events”,batchSize:10000} originatingCommand:{find:“events”, filter:{id:{$ in:[]}},batchSize:10000} planSummary:IXSCAN {id:1} cursorid:23973717840 keysExamined:10000 docsExamined:10000 fromMultiPlanner:1 numYields:81 nreturned:10000 reslen:7217981 locks:{全局:{acquireCount:{r:164}},数据库:{acquireCount:{r:82}},集合:{acquireCount:{r:82}}}协议:op_query 172ms
2017-12-15T01:15:39.565 + 0000 I COMMAND [conn3]命令db.events命令:getMore {getMore:23973717840,collection:“events”,batchSize:10000} originatingCommand:{find:“events”, filter:{id:{$ in:[]}},batchSize:10000} planSummary:IXSCAN {id:1} cursorid:23973717840 keysExamined:10001 docsExamined:10000 fromMultiPlanner:1 numYields:79 nreturned:10000 reslen:7252405 locks:{全局:{acquireCount:{r:160}},数据库:{acquireCount:{r:80}},集合:{acquireCount:{r:80}}}协议:op_query 165ms
我已经描述了我的Java代码:
我没有在其他地方做任何非标准的事情(使用forEach循环使用Consumer的FindIterable)所以我不确定它是如何成为Java ...但是日志表明它不可能只是Java。
我的表在相关列上有索引。我删除了$ in的内容。我尽可能地优化了我的桌面结构(我相信)。这可能是某种RAM问题吗?
在有人要求之前,我无法以不同的方式做某事。这个查询看起来很简单,使用较小的in(例如,5)返回更快但对我的应用程序来说太慢了。
任何帮助表示感谢。