用C#感受MongoDB MapReduce之魅力 转
2013-09-09 17:32
579 查看
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# 的魅力,将一坨代码写成一行
- [C#] C# 与 MongoDB 的 CURD
- 【转载】MongoDB中的MapReduce 高级操作介绍
- Node.Js中使用MongoDB中的MapReduce
- 使用MongoDB的MapReduce进行区域地震信息统计实验
- 感受数据结构的魅力:记一次查找性能优化
- MONGODB学习资料 用于c# & MVC
- C# 对MongoDB 进行增删改查的简单操作
- MongoDB实战(4)MapReduce
- 遇到的问题-----c#操作mongodb用foreach遍历集合报错curcor not found
- 用MongoDB实现MapReduce
- MongoDB系列一(索引及C#如何操作MongoDB)
- 在C#中使用samus驱动操作MongoDB
- 体验个推推送,感受Android推送的魅力
- 感受JS的魅力——网页版超级玛丽
- Mongodb中数据聚合之MapReduce
- 感受魅力云南 让风光震慑灵魂
- 在C#中使用官方驱动操作MongoDB
- [转载]MongoDB C# 驱动教程