gpt4 book ai didi

MongoDB 聚合比较 : group(), $group 和 MapReduce

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

我对何时使用 group()、与 $group 或 mapreduce 聚合有些困惑。我在 http://www.mongodb.org/display/DOCS/Aggregation 阅读了文档对于组(),http://docs.mongodb.org/manual/reference/aggregation/group/#_S_group对于 $group .. 分片是 group() 不起作用的唯一情况吗?另外,我觉得 $group 比 group() 更强大,因为它可以与聚合框架中的其他管道运算符结合使用.. $group 与 mapreduce 相比如何?我在某处读到它不会生成任何临时集合,而 mapreduce 会。是这样吗?
有人可以提供一个插图或引导我到一个链接,在其中一起解释这三个概念,采用相同的样本数据,以便我可以轻松比较它们吗?
编辑:此外,如果您能在新的 2.2 版本发布后特别指出这些命令中的任何新内容,那就太好了。

最佳答案

由于名称相似,这有点令人困惑,但 group() command是与 $group pipeline operator 不同的特性和实现在聚合框架中。

group() 命令、聚合框架和 MapReduce 是 MongoDB 的共同聚合特性。功能上有一些重叠,但我将尝试解释每个功能的差异和限制,就像 MongoDB 2.2.0 一样。

注意:下面提到的内联结果集是指在内存中处理并在函数调用结束时返回结果的查询。替代输出选项(目前仅适用于 MapReduce)可能包括将结果保存到新的或现有的集合。
group()命令

  • 用于分组的简单语法和功能.. 类似于 GROUP BY在 SQL 中。
  • 内联返回结果集(作为分组项目的数组)。
  • 使用 JavaScript 引擎实现;定制 reduce()函数可以用 JavaScript 编写。
  • 当前限制
  • 不会组合成具有超过 20,000 个键的结果集。
  • 结果必须符合 BSON 文档的限制(当前为 16MB)。
  • 获取读锁并且不允许任何其他线程在运行时执行 JavaScript。
  • 不适用于分片集合。
  • 另见: group() command examples .

  • map 简化
  • 实现 MapReduce model用于处理大型数据集。
  • 可以从几个中选择一个 output options (内联、新集合、合并、替换、减少)
  • MapReduce 函数是用 JavaScript 编写的。
  • 支持非分片和分片输入集合。
  • 可用于大型集合的增量聚合。
  • MongoDB 2.2 对 sharded map reduce output 实现了更好的支持.
  • 当前限制
  • 一次发射只能容纳 MongoDB 最大 BSON 文档大小 (16MB) 的一半。
  • 有一个 JavaScript 锁,所以一个 mongod 服务器在一个时间点只能执行一个 JavaScript 函数……然而,MapReduce 的大多数步骤都很短,所以锁可以经常产生。
  • MapReduce 函数可能难以调试。您可以使用 print()printjson()mongod 中包含诊断输出日志。
  • MapReduce 通常对于试图转换关系查询聚合体验的程序员来说并不直观。
  • 另见: Map/Reduce examples .

  • 聚合框架
  • MongoDB 2.2.0 生产版本(2012 年 8 月)中的新功能。
  • 旨在提高性能和可用性的特定目标。
  • 内联返回结果集。
  • 支持非分片和分片输入集合。
  • 使用“管道”方法,其中对象在通过一系列管道运算符(例如匹配、投影、排序和分组)时进行转换。
  • 管道运算符(operator)不需要为每个输入文档生成一个输出文档:运算符(operator)还可以生成新文档或过滤掉文档。
  • 使用投影,您可以添加计算域、创建新的虚拟子对象并将子域提取到顶级结果中。
  • 可以根据需要重复管道操作符(例如,多个 $project$group 步骤。
  • 当前限制
  • 结果内联返回,因此仅限于服务器支持的最大文档大小 (16MB)
  • 不支持与 MapReduce 一样多的输出选项
  • 仅限operators and expressions聚合框架支持(即不能编写自定义函数)
  • 用于聚合的最新服务器功能,因此在文档、功能集和使用方面有更多的成熟空间。
  • 另见: Aggregation Framework examples .

  • Can someone present an illustration or guide me to a link where these three concepts are explained together, taking the same sample data, so I can compare them easily?



    您通常不会找到比较所有三种方法都有用的示例,但这里是以前的 StackOverflow 问题,它们显示了变化:
  • group() versus Aggregation Framework
  • MapReduce versus Aggregation Framework
  • 关于MongoDB 聚合比较 : group(), $group 和 MapReduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12337319/

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