我有一个带有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分钟或更长时间),尤其是在集合中清理第一个元素时。
如何加快我的第二个应用程序?
答案 0 :(得分:0)
重点是整个集合项目和$匹配之后。如果您知道上一个parse server
或updateDate
(可能是您在某处存储了上次计划任务运行时间),那么您可以在投影之前限制此字段设置的初始聚合。