【发布时间】:2013-02-22 08:30:22
【问题描述】:
我知道如果有一个初始的$match 管道来限制要聚合的集合,那么聚合框架是合适的。但是,有时过滤后的集合可能仍然很大,例如大约 200 万,并且聚合将涉及$group。考虑到在最多 5 秒内输出结果的要求,聚合框架是否适合处理此类集合。目前我在一个节点上工作。通过对一个分片集进行聚合,性能会不会有显着提升。
【问题讨论】:
标签: mongodb aggregation-framework
我知道如果有一个初始的$match 管道来限制要聚合的集合,那么聚合框架是合适的。但是,有时过滤后的集合可能仍然很大,例如大约 200 万,并且聚合将涉及$group。考虑到在最多 5 秒内输出结果的要求,聚合框架是否适合处理此类集合。目前我在一个节点上工作。通过对一个分片集进行聚合,性能会不会有显着提升。
【问题讨论】:
标签: mongodb aggregation-framework
据我所知,唯一的限制是聚合的结果不能超过 16MB 的限制,因为它返回的是一个文档,这是 MongoDB 中文档的限制大小。此外,您不能使用超过机器总内存的 10%,因为通常使用 $match 阶段来减少您使用的集合,或者使用 $project 阶段来减少每个文档的数据。
请注意,在 $group 或 $sort 阶段之后的分片环境中,聚合将被带回 MongoS,然后再将其发送到管道的下一个阶段。 MongoS 可能与您的应用程序在同一台机器上运行,如果处理不当,可能会损害您的应用程序性能。
【讨论】:
$match 的字段的索引,但结果输出仍然很大(想想 200 万个苹果放在 5M 的水果篮中)。看来,$group 这样的后续操作可能是瓶颈。如果我有 4G 内存,是否足以处理流水线操作?