Mongodb聚合在200Gb集合中运行缓慢

时间:2016-01-27 22:31:38

标签: mongodb aggregation-framework

我有一个带有10M元素(200Gb)的分片mongo集合。

文件结构:

{
  _id
  updateDate
  cleanDate
  events1: [{...}, {...}, ...]
  events2: [{...}, {...}, ...]
  events3: [{...}, {...}, ...]
} 

除了_id之外没有其他索引。

第一个java应用程序从集合中创建,读取和更新文档。

第二个Java应用程序已安排查找具有updateDate > cleanDate的文档的任务,并从eventX数组中删除旧对象。当任务清除任何对象时,它会更新cleanDate

我使用myCollection.aggregate({ $project : { delta : { $cmp : ['$updateDate', '$cleanDate'] } } }, { $match : { delta : { $gt : 0 } } } , { $limit : 10000})查询来获取下一部分进行清理。

查询执行需要花费大量时间(有时10分钟或更长时间),尤其是在集合中清理第一个元素时。

如何加快我的第二个应用程序?

1 个答案:

答案 0 :(得分:0)

重点是整个集合项目和$匹配之后。如果您知道上一个parse serverupdateDate(可能是您在某处存储了上次计划任务运行时间),那么您可以在投影之前限制此字段设置的初始聚合。