`
wjjxf
  • 浏览: 239886 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mongodb的MapReduce学习经验

阅读更多
Mongodb的MapReduce学习经验

Mongodb的Map/reduce在批量操作数据或者聚合操作时很有用。这是官网的英文文档,可以看看:

http://www.mongodb.org/display/DOCS/MapReduce

现在,我该怎么用呢?

现在需要查看最近访问某人页面的5个人列表且不能重复,
访问轨迹在一个visit的collection里存储,visit里有3个字段,u,f,t.分别代表被访者id,访问者id,和访问时间。
现在如果用普通查询,sort可以解决,但是不能重复不能解决,本以为可以用distinct,但在mongodb里,distinct是用

runCommand方式查询的,不是find。。。


既然有Map/reduce,那就用这个试试吧。。。

Map/reduce有2个函数,map和reduce。

map的定义
function map(void) -> void
表示无参数也不返回参数,且必须至少调用emit(key,value)一次。map函数对于这个this Object自己,我们可以在函数体内

用this引用这个object

reduce定义
function reduce(key, value_array) -> value
传入一个key,和一个值数组,返回一个值。

Map/reduce如何运行的呢?我的经验是对于每个数据库里的对象调用map函数,再根据map里指定的key,再一起reduce,由于

一个key对应多个value,因此reduce的参数是value数组,处理完毕,返回这个key对应的最后结果。


在命令行下的可以这么写:

m=function(){
	emit(this.f,this);
};
v=function(key,values){
	var i=0,idx=-1;
	var maxt =0;
	for(i=0;i<values.length;i++){
		if(maxt< values[i].t){maxt = values[i].t;idx = i;}
	}
	return values[idx];
};
res = db.userVisit.mapReduce(m,v,{query:{"u":"4c7cd410ea701e4b7bb16c33"}}, {sort:{t:-1}});
db[res.result].find();//此处返回{key:"",value:""}对应每个f及visit对象
res.drop();//因为会创建个临时表,在这里显示的删除它,虽然在连接关闭时会自动删除



java代码可以这么写:

		DBObject q = new BasicDBObject();
		q.put("u", userId); 
		
		final String m = "function(){emit(this.f,this);};";
		final String r = "function(key,values){"+
						"var i=0;" +
						"var idx=-1;"+
						"var maxt=0;"+
						"for(i=0;i<values.length;i++){"+//同ket,选择最大的时间
						"	if(maxt< values[i].t){maxt = values[i].t;idx = i;}"+
						"}"+
						"return values[idx];"+
					"};";

		
		MapReduceOutput out = super.dbCol.mapReduce(m, r, null, q);
		DBCursor cur = out.results();
		cur.limit(num);
		List<Visit> list = new ArrayList<Visit>(num);
		DBObject obj = null;
		try{
			while (cur.hasNext()) {			
				obj = cur.next(); 
				list.add(super.dbobjectToObject((DBObject) obj.get("value")));
			}
		}catch(Exception e){
			e.printStackTrace();
		} 
		out.drop();
		return list;


这是我学习的经验,欢迎提出批评指正。
分享到:
评论

相关推荐

    MongoDB MapReduce分享.ppt

    在这个“MongoDB MapReduce 分享”中,我们将深入探讨 MapReduce 在 MongoDB 中的应用及其核心概念。 MapReduce 包含两个主要函数:Map 和 Reduce。Map 阶段负责将输入数据分解成小块,然后对每一块应用一个函数,...

    mongodb mapreduce 实例

    MongoDB的MapReduce是一个强大的工具,它允许用户在数据库中执行复杂的聚合操作,尤其是处理大数据集时。在这个实例中,我们将探讨如何利用MapReduce来统计订单数据,这在电子商务平台如“CShop”中是非常常见的需求...

    MongoDB中MapReduce的使用方法详解

    MongoDB的MapReduce是一种强大的工具,用于处理和分析大量数据,尤其适合于复杂的数据聚合任务。MapReduce的工作原理是将大规模数据集分解成小块,分别在不同的节点上执行计算,然后将结果合并以得到最终答案。在...

    MongoDB中的MapReduce简介

    MongoDB的MapReduce功能是基于分布式计算模型的一种数据处理方式,它允许用户在数据库中进行大规模数据处理。MapReduce的核心思想是将复杂的数据处理任务分解为两个主要阶段:Map阶段和Reduce阶段。 Map阶段是数据...

    MongoDB的MapReduce.pdf

    MongoDB的MapReduce是一种在大型数据集上进行并行计算的编程模型,尤其适用于数据分析任务。MapReduce由Google提出,其灵感来源于函数式编程语言中的Map和Reduce概念,旨在简化分布式计算,使得开发者无需深入理解...

    MongoDB与Hadoop MapReduce的海量非结构化数据处理方案.pdf

    MongoDB与Hadoop MapReduce的海量非结构化数据处理方案 本文旨在探索基于MongoDB与Hadoop MapReduce的海量非结构化数据处理方案,旨在解决大数据时代下的数据处理难题。该方案通过MongoDB Cluster、MongoDB-...

    计算机后端-PHP视频教程. mongodb10 MapReduce 统计栏目下的商品.wmv

    计算机后端-PHP视频教程. mongodb10 MapReduce 统计栏目下的商品.wmv

    MongoDB学习笔记

    学习MongoDB不仅需要理解其基本的数据操作和管理,还需要了解其高级特性、集群部署、索引机制、日志系统、数据备份与恢复等方面的知识。接下来将基于提供的文件内容详细展开介绍MongoDB的相关知识点。 一、入门 1. ...

    MongoDB学习笔记之MapReduce使用示例

    MongoDB的MapReduce是一个强大的工具,它允许开发者处理和聚合大量数据。MapReduce基于一种分布式计算模型,将大规模数据处理任务分解为两步:Map(映射)和Reduce(归约)。在这个过程中,MongoDB首先应用Map函数...

    Hadoop&MongoDB;学习资料

    3. **MapReduce编程**:学习Java编程,实现MapReduce作业,理解数据分片、Map函数、Shuffle过程和Reduce函数。 4. **YARN**:下一代资源调度器,用于管理和分配集群资源,取代了最初的JobTracker。 5. **Hadoop生态*...

    Mongodb 视频

    总之,“MongoDB视频”教程将引导你深入理解MongoDB的核心概念、操作技巧以及在实际应用中的最佳实践,无论你是初学者还是有经验的开发者,都能从中受益匪浅。通过观看和实践,相信你将在MongoDB的世界里游刃有余。

    mongodb学习手册.rar

    本"mongodb学习手册"提供了全面且清晰的指导,适合初学者和有一定经验的开发者深入理解MongoDB的核心概念和技术。 在手册中,你可能会遇到以下关键知识点: 1. **MongoDB基础**:首先,你会了解到MongoDB的基本...

    计算机后端-PHP视频教程. mongodb09 MapReduce 概念.wmv

    计算机后端-PHP视频教程. mongodb08 导出导入.wmv

    Mongodb学习资料(Mongodb权威指南+实战班克)

    3. 性能优化:分享在实际操作中提高MongoDB性能的经验和技巧,如硬件选择、内存配置、查询优化等。 4. 集成开发:讲解如何将MongoDB与其他技术栈(如Node.js、Python、Java等)集成,以及如何在开发环境中使用...

    MongoDB入门学习

    ### MongoDB入门学习知识点详解 #### 一、MongoDB简介与特点 MongoDB是一款非常流行的开源文档型NoSQL数据库系统,采用C++语言实现,具备高度的可扩展性和高性能。它适用于处理大规模的数据集,并提供了丰富的功能...

Global site tag (gtag.js) - Google Analytics