zoukankan      html  css  js  c++  java
  • MongoDB Map Reduce

    介绍

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

    MongoDB提供的Map-Reduce非常灵活,对于大规模数据分析也相当实用。

    基本语法

    >db.collection.mapReduce(
       function() {emit(key,value);},  //map 函数
       function(key,values) {return reduceFunction},   //reduce 函数
       {
          out: collection,
          query: document,
          sort: document,
          limit: number
       }
    )

    使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value), 遍历 collection 中所有的记录, 将key 与 value 传递给 Reduce 函数进行处理。

    Map 函数必须调用 emit(key, value) 返回键值对。

    参数说明:

    • map :映射函数 (生成键值对序列,作为 reduce 函数参数)。
    • reduce 统计函数,reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value。。
    • out 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。
    • query 一个筛选条件,只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)
    • sort 和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
    • limit 发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)

    使用MapReduce示例

    > db.col.find()
    { "_id" : ObjectId("56c691ae64799370c0ef3583"), "x" : "a", "status" : "on" }
    { "_id" : ObjectId("56c691af64799370c0ef3584"), "x" : "a", "status" : "on" }
    { "_id" : ObjectId("56c691b064799370c0ef3585"), "x" : "a", "status" : "on" }
    { "_id" : ObjectId("56c691ba64799370c0ef3586"), "x" : "a", "status" : "off" }
    { "_id" : ObjectId("56c691bf64799370c0ef3587"), "x" : "b", "status" : "off" }
    { "_id" : ObjectId("56c691c064799370c0ef3588"), "x" : "b", "status" : "off" }
    { "_id" : ObjectId("56c691c664799370c0ef3589"), "x" : "b", "status" : "on" }

    现在找出status=on,按着x分类统计出各自的个数

    db.col.mapReduce(
    function() { emit(this.x, 1); },
    function(key, values) { return Array.sum(values) },
    {
        query: {status:"on"},
        out:"post_total",
    }
    ).find()

    结果

    /* 0 */
    {
        "_id" : "a",
        "value" : "aaa"
    }
    
    /* 1 */
    {
        "_id" : "b",
        "value" : "a"
    }

    用类似的方式,MapReduce可以被用来构建大型复杂的聚合查询。

    Map函数和Reduce函数可以使用 JavaScript 来实现,是的MapReduce的使用非常灵活和强大

  • 相关阅读:
    HTML DOM教程 14HTML DOM Document 对象
    HTML DOM教程 19HTML DOM Button 对象
    HTML DOM教程 22HTML DOM Form 对象
    HTML DOM教程 16HTML DOM Area 对象
    ubuntu 11.04 问题 小结
    VC6.0的 错误解决办法 小结
    boot.img的解包与打包
    shell里 截取字符串
    从零 使用vc
    Imagemagick 对图片 大小 和 格式的 调整
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/5200895.html
Copyright © 2011-2022 走看看