gpt4 book ai didi

performance - MongoDB - '$group' 性能缓慢

转载 作者:行者123 更新时间:2023-12-02 00:52:14 25 4
gpt4 key购买 nike

我有一个包含超过 1,000,000 条记录的 MongoDB 集合。每个记录大小约为 20K(因此总集合大小约为 20GB)。

我在集合中有一个“类型”字段(可以有大约 10 个不同的值)。我想获取该集合的每种类型计数器。此外,“类型”字段上有一个索引。

我测试了两种不同的方法(假设 python 语法):

一种简单的方法 - 使用“count”调用每个值:

for type_val in my_db.my_colc.distinct('type'):
counters[type_val] = my_db.my_colc.find({'type' : type_val}).count()

使用带有“$group”语法的聚合框架:

counters = my_db.my_colc.aggregate([{'$group' :  {'_id': '$type', 'agg_val': { '$sum': 1 } }}])

我收到的第一种方法的性能比第二种方法快大约 2 个数量级。似乎与以下事实有关: count 仅在索引上运行,而不访问文档,而 $group 必须逐一检查文档。(大约 1 分钟与 45 分钟)。

是否有任何方法可以在“类型”索引上运行高效的分组查询,该查询仅使用索引,从而实现#1 的性能结果,但使用聚合框架?

我使用的是 MongoDB 2.6.1

更新: https://jira.mongodb.org/browse/SERVER-11447已在 MongoDB Jira 中公开讨论此问题。

最佳答案

在聚合管道中,$group 子句不使用索引。它应该在 $match 之后使用,确实可以使用索引来加快速度。

http://docs.mongodb.org/manual/core/aggregation-pipeline/#aggregation-pipeline-operators-and-performance

干杯,

关于performance - MongoDB - '$group' 性能缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24980525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com