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. 如何部署Scrapy 到Scrapyd上?

    安装上传工具 1.上传工具 scrapyd-client 2.安装方法: pip install scrapyd-client 3.上传方法: python d:\Python27\Scripts\s ...

  2. switch-case 执行顺序

    switch(expression){ case value : //语句 break; //可选 case value : //语句 break; //可选 //你可以有任意数量的case语句 de ...

  3. c time_t 和 oc NSDate 的转换

    c time_t 和 oc NSDate 的转换 1:time_t 转 oc NSDate time_t some_time_t=NULL; NSDate *someDate = [NSDate da ...

  4. maven 添加支持编译jdk1.7

     1.在<profiles>元素内增加如下内容   <profile>     <id>jdk17</id>     <activation> ...

  5. SQL Server 2012清除连接过的服务器名称历史

    退出客户端后 SQL Server 2012: 删除这两个地方!请提前备份! X:\Users\XXX\AppData\Roaming\Microsoft\SQL Server Management ...

  6. C#程序以管理员权限运行【我采用了第二种,比较好用】

    在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也无法对系统目录.系统注册表 ...

  7. VBA中find的一些使用方法

    用excel处理数据的时候,无论是使用VBA还是函数,查找和引用都是两大主要的工作,VBA中的find系列的方法(find.findnext.Range.FindPrevious)返回range对象, ...

  8. 设置JVM参数,查看堆大小

    1.在eclipse设置JVM参数     打开eclipse-窗口-首选项-Java-已安装的JRE(对在当前开发环境中运行的java程序皆生效,也就是在eclipse中运行的java程序)编辑当前 ...

  9. jQuery 2.0.3 源码分析 bind/live/delegate/on

    传统的时间处理: 给某一个元素绑定一个点击事件,传入一个回调句柄处理 element.addEventListener('click',doSomething,false); 这样的绑定如果页面上面有 ...

  10. Excepion

    异常:就是程序在运行时出现不正常的情况. 异常由来:问题也就是现实生活中一个具体的食物,也可以通过java的类的形式进行秒速.并封装成对象.其实就是java对不正常情况进行毛素后的对象体现. 对于问题 ...