用C#感受MongoDB MapReduce之魅力
2011-08-05 07:52
274 查看
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函数,统计下单词出现在哪个记录里,
执行结果如下(虚线下面的部分)
Map首先将文档映射到集合并操作文档,这一步可能产生多个键和多个值或者什么也没有(文档中要处理的值为空)。而后按照键分组,并将产生的值组成列表放到对应的键中。Reduce则把列表中的值化简为一个值。这个值被返回,而后继续按键分组,进行化简,直到每个键在列表中只有一个值为止,这个值也就是最终结果。
在MongoDB中,需要用JavaScript写一个Map()函数和一个Reduce()函数。Map函数使用emit函数返回要处理的值。Emit会传给redcuce函数一个键和一个值。Reduce 函数接收两个参数,第一个是key,接收emit返回的键;第二个是values数组,也就是emit返回的值,它有一个或者多个对应于键的文档组成。
下面写一个实例,用实例感悟一下MapReduce。
首先建一实体类,
接下来连接数据库,
插入几条测试记录,
下面就是本例的核心,两个JavaScript方法,主要用于统计不同的单词在集合中出现的次数,
用以下代码可以遍历mapreduce返回的结果
执行结果
本例mapreduce处理结果的方法可能类似下图,执行过程可能不太一样,但是思想就是这么个思想,
运行计算时,mongodb会产生几个中间结果,结束后会被自动删除,如图
可以再写一对JavaScript函数,统计下单词出现在哪个记录里,
执行结果如下(虚线下面的部分)
相关文章推荐
- 用C#感受MongoDB MapReduce之魅力 转
- 感受C# 的魅力,将一坨代码写成一行
- 【选择图片Jar】感受”MVC”魅力-扩展选择数量(七)
- 浅析MongoDB及其C#驱动的操作步骤(转自:http://database.51cto.com/art/201007/212039.htm)
- MongoDB MapReduce 分组统计
- MongoDB 副本集和C#交互,简单测试
- 在C#中使用官方驱动操作MongoDB
- c# mongodb driver 插入重复记录
- 在MongoDB中实现聚合函数(mapreduce)
- 使用hadoop mapreduce分析mongodb数据:(1)
- mongodb mapReduce实例
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- MongoDB(索引及C#如何操作MongoDB)(转载)
- C#版的MapReduce
- C# 对MongoDB 进行增删改查的简单操作
- MongoDB 学习笔记四 C#调用MongoDB
- mongodb中的mapreduce,以及java代码中的做法
- MongoDB使用总结(C#版 潘鹏)
- 使用mongodb 的MapReduce功能笔记
- Mongodb-MapReduce 折腾一下午的问题!