zoukankan      html  css  js  c++  java
  • MongoDB:MapReduce基础及实例

    背景

         MapReduce是个非常灵活和强大的数据聚合工具。它的好处是可以把一个聚合任务分解为多个小的任务,分配到多服务器上并行处理。

    MongoDB也提供了MapReduce,当然查询语肯定是JavaScript。MongoDB中的MapReduce主要有以下几阶段:

       1. Map:把一个操作Map到集合中的每一个文档

       2. Shuffle: 根据Key分组对文档,并且为每个不同的Key生成一系列(>=1个)的值表(List of values)。

       3. Reduce: 处理值表中的元素,直到值表中只有一个元素。然后将值表返回到Shuffle过程,循环处理,直到每个Key只对应一个值表,并且此值表中只有一个元素,这就是MR的结果。

       4. Finalize:此步骤不是必须的。在得到MR最终结果后,再进行一些数据“修剪”性质的处理。

    MongoDB中使用emit函数向MapReduce提供Key/Value对。

    Reduce函数接受两个参数:Key,emits. Key即为emit函数中的Key。 emits是一个数组,它的元素就是emit函数提供的Value。

    Reduce函数的返回结果必须要能被Map或者Reduce重复使用,所以返回结果必须与emits中元素结构一致。

    Map或者Reduce函数中的this关键字,代表当前被Mapping文档。

    实例

      测试数据: 这个集合是三个用户购买的产品和产品价格的数据。

    Code

    1. 每个用户各购买了多少个产品?(<单一Key做MR)

    Code

    2. 每个用户不同的产品购买了多少个?(复合Key做MR)

    Code

    3. 每个用户购买的产品数量,总金额是多少?(复合Reduce结果处理)

    Code

    4. 在3中返回的amount的float精度需要改成两位小数,还需要得到商品的平均价格。(使用Finalize处理reduce结果集)

    Code

    5. 统计单价大于6的SKU,每个用户的购买数量.(筛选数据子集做MR)

      这个比较简单了,只需要将1.中调用MR时加上筛选查询即可,其它不变.

    Code

    总结

       MongoDB中的MR工具非常强大,文中的例子只是基础实例.结合Sharding后,多服务器并行做数据集合处理,才能真正显现其能力.

       如果后续有时间,希望能总结和分享更多关于MongoDB,关于SQL Server的东西.

  • 相关阅读:
    c语言中的增量与减量········不要太聪明
    存储器··············RAM,SRAM,EEPROM 等等
    对于 sizeof(char)的一些零碎······
    C语言中float,double等类型,在内存中的结构
    同步异步存储器
    Linux的帧缓冲设备(Framebuffer)简介
    嵌入式 c 中结构体经常碰到_I、 __O 、__IO是什么意思?
    新型的按键扫描程序
    数据结构
    jQuery(八)选择器与选择方法
  • 原文地址:https://www.cnblogs.com/Joe-T/p/4264910.html
Copyright © 2011-2022 走看看