我有一个使用Mongo的Map/Reduce框架进行的过程,但性能不佳。这是一个相当简单的聚合操作,其中我对3个字段进行分组,并返回4个字段的总和,以及传递另外4个字段(每个桶内都是恒定的值)。
如[ Map-Reduce performance in MongoDb 2.2, 2.4, and 2.6 ]所述,出于某些原因,我希望将其转换为聚合框架以获得更好的性能,但有3件事阻挡了我:
如[ Map-Reduce performance in MongoDb 2.2, 2.4, and 2.6 ]所述,出于某些原因,我希望将其转换为聚合框架以获得更好的性能,但有3件事阻挡了我:
- 总结果可能很大,超过Mongo的16MB限制,即使结果中的任何一个文档都非常小。
- 我可以直接映射/减少到另一个集合,但聚合框架只能返回内联结果(我认为?)
- 对于源集合中到达的更多数据的增量更新,我可以使用Map/Reduce,其中Java中的MapReduceCommand.OutputType设置为REDUCE,与我的用例完全匹配,但我没有看到聚合框架中的相应功能。
{$match: ...}
仅选择新数据,则聚合可以轻松地成为增量操作。 - Ken Williams