架构师系列-mongo(七)-MapReduce

MapReduce

MongoDB的聚合操作主要是对数据的批量处理,一般都是将记录按条件分组之后进行一系列求最大值,最小值,平均值的简单操作,也可以对记录进行数据统计,数据挖掘的复杂操作,聚合操作的输入是集中的文档,输出可以是一个文档也可以是多个文档。

Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复杂的聚合逻辑,MongoDB不允许Pipeline的单个聚合操作占用过多的系统内存,如果一个聚合操作消耗20%以上的内存,那么MongoDB直接停止操作,并向客户端输出错误消息。

什么是MapReduce

MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)

mapreduce使用javascript语法编写,其内部也是基于javascript V8引擎解析并执行,javascript语言的灵活性也让mapreduce可以处理更加复杂的业务场景;当然这相对于aggreation pipleine而言,意味着需要书写大量的脚本,而且调试也将更加困难。(调试可以基于javascript调试,成功后再嵌入到mongodb中)

执行阶段

mapreduce有2个阶段:map和reduce;

  • mapper处理每个document,然后emits一个或者多个objects,object为key-value对;
  • reducer将map操作的结果进行联合操作(combine)。此外mapreduce还可以有一个finalize阶段,这是可选的,它可以调整reducer计算的结果。在进行mapreduce之前,mongodb支持使用query来筛选文档,也支持sort排序和limit。
语法
MapReduce 的基本语法如下:

db.collection.mapReduce(
   function() {
        this -- document
        
        emit(key,value);
   },  //map 函数
   function(key,values) {
     key,values
    return reduceFunction
    
   },   //reduce 函数
   {
      out: collection,
      query: document,
      sort: document,
      limit: number,
      finalize: <function>,
      scope: <document>,
      jsMode: <boolean>,
      verbose: &l
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值