new day,new life---1月2日,2014
map-reduce是一个很好聚合工具,在Mongo中的count,group,distinct等命令都可以用map-reduce实现,而且distinct可以存储的值有大小限制,这时mapreduce的优势就显现出来。当然,map-reduce 也是有代价的:速度,不可用在“实时”的环境中。
map-reduce 要分几个步骤 :
1>映射(map),映射出一个key-values的文档,values可能含一个(key不重复)、多个(key重复),这里的key是统计的字段。
2 > 洗牌(shuffle),按照键的分组,形成列表
3> 化简(reduce), 将要统计的字段化简成单值。
下面,我们将举一个简单的例子,统计出集合中所有的键,//表示注释。
1 映射 map = function() {emit(this.md5,1)} ;// 统计md5的值,并且设置出现的次数为1,this表示传入的记录(文档)。
2 化简 reduce = function(key,val) { return Array.sum(val)} ;// 统计同一个key出现的总的次数
3 运行mapreduce ,详细的参数可以参照(http://docs.mongodb.org/manual/core/map-reduce/)
参数说明: result//存放的数据集合
timeMillis: 消耗的时间(毫秒)
ok :1 ,状态位,1表示成功,反之失败。
count:{
input://表示符合要求的文档
emit //映射的个数
reduce //化简所用的次数
output//输出的结果数
}
上述只是一个简单的例子,mapreduce的功能远不止于此,借此与大家一起探讨学习!