MapReduce这个名词随着hadoop的用户的增多,越来越被人关注。MapReduce可谓MongoDB之中的亮点,我也想深入了解MapReduce,加上MongoDB操作简单,所以就选择了它。MapReduce可以把问题划分为多个不同部分并分发到不同服务器并行处理问题,每台服务器都把分配给自己的一部分问题处理完毕后,把结果返回给主服务器,主服务器汇总结果,最终完成问题的处理。

Map首先将文档映射到集合并操作文档,这一步可能产生多个键和多个值或者什么也没有(文档中要处理的值为空)。而后按照键分组,并将产生的值组成列表放到对应的键中。Reduce则把列表中的值化简为一个值。这个值被返回,而后继续按键分组,进行化简,直到每个键在列表中只有一个值为止,这个值也就是最终结果。

在MongoDB中,需要用JavaScript写一个Map()函数和一个Reduce()函数。Map函数使用emit函数返回要处理的值。Emit会传给redcuce函数一个键和一个值。Reduce 函数接收两个参数,第一个是key,接收emit返回的键;第二个是values数组,也就是emit返回的值,它有一个或者多个对应于键的文档组成。

下面写一个实例,用实例感悟一下MapReduce。

首先建一实体类,

接下来连接数据库,

插入几条测试记录,

下面就是本例的核心,两个JavaScript方法,主要用于统计不同的单词在集合中出现的次数,

用以下代码可以遍历mapreduce返回的结果

执行结果

本例mapreduce处理结果的方法可能类似下图,执行过程可能不太一样,但是思想就是这么个思想,

运行计算时,mongodb会产生几个中间结果,结束后会被自动删除,如图

可以再写一对JavaScript函数,统计下单词出现在哪个记录里,

执行结果如下(虚线下面的部分)

用C#感受MongoDB MapReduce之魅力 转的更多相关文章

  1. MongoDB MapReduce(转)

    MapReduce MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE).这样做的好处是可以在任务被分解后,可以通过大量机 ...

  2. mongodb mapreduce使用总结

    文章来自本人个人博客: mongodb mapreduce使用总结 ​ 大家都知道,mongodb是一个非关系型数据库.也就是说.mongodb数据库中的每张表是独立存在的,表与表之间没有不论什么依赖 ...

  3. [MongoDB]mapReduce

    摘要 上篇文章介绍了count,group,distinct几个简单的聚合操作,其中,group比较麻烦一点.本篇文章将学习mapReduce的相关内容. 相关文章 [MongoDB]入门操作 [Mo ...

  4. MongoDB MapReduce学习笔记

    http://cnodejs.org/topic/51a8a9ed555d34c67831fb8b http://garyli.iteye.com/blog/2079158 MapReduce应该算是 ...

  5. MongoDB MapReduce用法简介

    Map-Reduce部分:Map-Reduce相当于关系型数据库中的group by,主要用于统计数据之用.MongoDB提供的Map-Reduce非常灵活,对于大规模数据分析也相当实用. 语法 db ...

  6. MongoDB:MapReduce基础及实例

    背景 MapReduce是个非常灵活和强大的数据聚合工具.它的好处是可以把一个聚合任务分解为多个小的任务,分配到多服务器上并行处理. MongoDB也提供了MapReduce,当然查询语肯定是Java ...

  7. E QUERY [main] SyntaxError: identifier starts immediately after numeric literal mongodb mapReduce 异常分析 集合命名规范

    异常信息 repl_test:PRIMARY> db.0917order_totals_b.find()2018-09-28T15:13:03.992+0800 E QUERY [main] S ...

  8. mongodb~mapreduce的实现特殊逻辑的统计

    map reduce的解释 这是一张来自mongodb-mapreduce图示,比较能说明问题

  9. MongoDB MapReduce 的示例。

    // JavaScript source code db.runCommand({ mapreduce: "page", map: function Map() { emit( t ...

随机推荐

  1. Office 多版本共存

    1 32位共存 假如已经安装了Office 2003(必定是32位的),那么安装 32位Office 2010 时会出现如下错误: 图1.1 解决办法: 1.将下述三个注册表项导出到文件2003A.r ...

  2. JVM调优总结(转)

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  3. 使用mybatis操作mysql数据库SUM方法返回NULL解决

    使用SQL语句用函数SUM叠加的时候,默认查询没有值的情况下返回的是NULL,而实际可能我们要用的是返回0 解决: SELECT SUM(total)   FROM test_table 改成: SE ...

  4. nodeschool.io 10

    ~~ TIME SERVER ~~ Write a TCP time server! Your server should listen to TCP connections on port 8000 ...

  5. [转]sql中判断text类型字段是否为空

    用 字段=''会报错:数据类型 text 和 varchar 在 equal to 运算符中不兼容. 正确方法: 1. 字段 is null 2. datalength(字段)=0 注:SQL中的DA ...

  6. 关于SQL语句优化的一个问题

    今天写了一个很简单的存储过程,结果一执行,40多秒,后来调整了一句话写法,瞬间出来,其实差别不大,如下: select item_no=vpc.ITEM_ID ,BL_QTY=sum(vpc.QTY_ ...

  7. 5月21日 CSS样式表加阴影

    HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  8. class、interface、struct的区别

    1 struct和class有什么区别 1.1默认的继承访问权限 Struct是public的,class是private的. 你可以写如下的代码: struct A { char a; }; str ...

  9. Check the difficulty of problems(POJ 2151)

    Check the difficulty of problems Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5457   ...

  10. Play framework logging设置

    play的logger是基于Log4j,Play 2.0 uses logback as its logging engine. 一.配置 1. 在conf/application.conf中设置lo ...