Aaf*_*ikh 39 mapreduce mongodb mongodb-query aggregation-framework
关于何时使用group(),与$ group或mapreduce聚合,我有点困惑.我在http://www.mongodb.org/display/DOCS/Aggregation上阅读了针对group()的文档,http://docs.mongodb.org/manual/reference/aggregation/group/#_S_group for $ group ..分片是否group()不起作用的唯一情况?另外,我觉得$ group比group()更强大,因为它可以与聚合框架中的其他管道运算符一起使用.$ group如何与mapreduce进行比较?我在某处读到它不生成任何临时集合,而mapreduce则生成.是这样吗?
有人可以提供插图或指导我一起解释这三个概念的链接,采用相同的样本数据,以便我可以轻松地比较它们吗?
编辑:
此外,如果您可以在这些命令中指出任何新的东西,那将是很好的,因为新的2.2版本出来了..
Ste*_*nie 74
这有点令人困惑,因为名称相似,但group()命令是聚合框架中$group管道运算符的不同特性和实现.
group()命令,Aggregation Framework和MapReduce是MongoDB的统一聚合功能.功能有一些重叠,但我会尝试解释MongoDB 2.2.0中每个功能的差异和局限性.
注意:下面提到的内联结果集指的是在内存中处理的查询,并在函数调用结束时返回结果.替代输出选项(目前仅适用于MapReduce)可以包括将结果保存到新的或现有的集合.
group() 命令用于分组的简单语法和功能..类似于GROUP BYSQL.
返回结果集内联(作为分组项的数组).
使用JavaScript引擎实现; 自定义reduce()函数可以用JavaScript编写.
目前的限制
不会分组到超过20,000个键的结果集.
结果必须符合BSON文件的限制(目前为16MB).
采用读锁定,并且在运行时不允许任何其他线程执行JavaScript.
不适用于分片集合.
另请参见:group()命令示例.
实现MapReduce模型以处理大型数据集.
可以从多个输出选项中选择一个(内联,新集合,合并,替换,减少)
MapReduce函数是用JavaScript编写的.
支持非分片和分片输入集合.
可用于大型集合的增量聚合.
MongoDB 2.2实现了对分片地图缩减输出的更好支持.
目前的限制
单个发射只能容纳MongoDB的最大BSON文档大小的一半(16MB).
有一个JavaScript锁,所以mongod服务器只能在某个时间点执行一个JavaScript函数.但是,MapReduce的大多数步骤都很短,因此可以经常产生锁.
MapReduce函数可能很难调试.您可以使用print()和printjson()在mongod日志中包含诊断输出.
对于试图翻译关系查询聚合体验的程序员来说,MapReduce通常不直观.
另请参见:Map/Reduce示例.
MongoDB 2.2.0产品发布中的新功能(2012年8月).
旨在提高性能和可用性的具体目标.
返回内联结果集.
支持非分片和分片输入集合.
使用"管道"方法,在对象通过一系列管道操作符(如匹配,投影,排序和分组)时进行转换.
管道运营商不需要为每个输入文档生成一个输出文档:运营商也可以生成新文档或过滤掉文档.
使用投影,您可以添加计算字段,创建新的虚拟子对象,并将子字段提取到顶级结果中.
可以根据需要重复管道运算符(例如,多个$project或$group步骤.
目前的限制
结果以内联方式返回,因此仅限于服务器支持的最大文档大小(16MB)
不支持与MapReduce一样多的输出选项
仅限于聚合框架支持的运算符和表达式(即无法编写自定义函数)
用于聚合的最新服务器功能,因此在文档,功能集和使用方面有更多成熟空间.
另请参见:聚合框架示例.
有人可以提供插图或指导我一起解释这三个概念的链接,采用相同的样本数据,以便我可以轻松地比较它们吗?
您通常不会找到比较所有三种方法都有用的示例,但以前的StackOverflow问题显示了变化:
| 归档时间: |
|
| 查看次数: |
13690 次 |
| 最近记录: |