4.3 MapReduce编程
MongoDB提供了当前流行的MapReduce并行编程模型,为海量数据的查询分析提供了一种更加高效的方法。
用MongoDB做分布式存储,再用MapReduce来做分析。
Map-Reduce操作有两部分:
- 一个map阶段处理每一个文档,并为每一个输入的文档产生一个或多个对象,
- 在reduce阶段,对上一步Map产生的输出结果进行合并。
map-reduce也可以有一个最终的阶段来对最后的输出结果进行修改,就像其他聚集操作一样
map-reduce能够指定一个查询条件来对输入文档的查询结果进行排序以及部分输出(sort and limit)。
Map-reduce一般采用自定义JavaScript函数来处理map操作与reduce操作以及可选的最后一个最终操作;
采用自定义的JavaScript能够比管道聚集更灵活,然而一般情况下map-reduce比管道聚集更加低效,也更加复杂。
Map-reduce进行聚集的示例:
- 命令:db.orders.mapReduce( function(){emit(this.custid,this.amount);}, function(key,values){return Array.sum(values)}, { query:{status:“A”}, out:“order_totals” } )
- query:查询过滤条件,返回状态为A的值;
- map:映射对应字段,产生键值对,emit(key,value);
- reduce:对map数据进行归约,对数组中value求和;
- out:输出结果保存在集合order_totals中;
- 处理流程:query -> map ->reduce