gpt4 book ai didi

mongodb - 增加 mongodb 聚合作业的内存限制

转载 作者:IT老高 更新时间:2023-10-28 13:36:25 25 4
gpt4 key购买 nike

基于聚合管道文档,“任何单个聚合操作都会消耗超过 10% 的系统 RAM,该操作会产生错误。”- http://docs.mongodb.org/manual/core/aggregation-pipeline-limits/

有没有办法增加这个限制?我还设置了 allowDiskUse: true (因此错误不再是问题),但想使用更多 RAM 来提高性能。

背景:我正在 mongodb 上运行大约 1 亿个条目的大型聚合作业。这基本上是对 $group 的大规模调用,以根据键合并条目。

我正在使用 mongo v 2.6.0-rc2 (3/21/2014) 的开发版

最佳答案

不,没有设置,如果您真的考虑一下,这是有充分理由的。因此,如果您首先考虑聚合在做什么以及 MongoDB 通常做什么,就应该清楚了。

这是任何合理聚合管道的“头部”“应该”:

db.collection.aggregate([
{ "$match:{ /* Something here */ } },

原因如下:

  1. 尝试减少您在任何操作中操作的工作集是很好的

  2. 这也是唯一您有机会使用索引来帮助搜索选择的时间。这总是比收集扫描更好。

  3. 即使有一个内置的“优化器”,它会寻找诸如限制“选定”字段的“投影”之类的东西,工作集大小的最佳审查员是 处理有效记录。后期比赛没有以这种方式“优化”。(参见第 1 点)

接下来要考虑的是 MongoDB 的一般行为。因此,服务器进程想要这样做,“消耗”尽可能多的可用机器内存以保持“工作集”数据(集合和/或索引),以便以最有效的方式在该数据上“工作”

因此,确实以这种方式“花费”大部分的内存分配符合数据库引擎的“最佳利益” .这样一来,您的 “聚合” 作业和所有 其他 并发进程都可以访问内存空间中的“工作数据”。

因此,因此 “不是最佳的” MongoDB “窃取”此内存分配远离其他并发操作只是服务您正在运行的聚合操作。

“根据硬件要求编程” 术语中,您知道 future 的版本允许聚合管道实现“磁盘使用”以允许更大的处理。您始终可以实现 SSD 或其他快速存储技术。当然,“10%” 的 RAM 取决于系统中安装的 RAM 量。所以你总是可以增加

综上所述,MongoDB 有一个真正的工作,即 “并发数据存储”,并且做得很好。它不是是一个特定“聚合job-runner”,不应被视为这样。

因此,要么“分解”您的工作负载,要么增加您的硬件规范,或者干脆将大型“任务运行”事件切换为可以做的事情 专注于正在运行的作业,例如 Hadoop 风格“mapReduce”,而让 MongoDB 自己处理提供数据的作业

当然,也可以将您的设计更改为简单地“预聚合”某处“写入时”所需的数据。

正如俗话说的那样,“一马当先”,或者将你的工具用于设计的目的

关于mongodb - 增加 mongodb 聚合作业的内存限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22726028/

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