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 分享”中,我们将深入探讨 MapReduce 在 MongoDB 中的应用及其核心概念。 MapReduce 包含两个主要函数:Map 和 Reduce。Map 阶段负责将输入数据分解成小块,然后对每一块应用一个函数,...
MongoDB的MapReduce是一个强大的工具,它允许用户在数据库中执行复杂的聚合操作,尤其是处理大数据集时。在这个实例中,我们将探讨如何利用MapReduce来统计订单数据,这在电子商务平台如“CShop”中是非常常见的需求...
MongoDB的MapReduce是一种强大的工具,用于处理和分析大量数据,尤其适合于复杂的数据聚合任务。MapReduce的工作原理是将大规模数据集分解成小块,分别在不同的节点上执行计算,然后将结果合并以得到最终答案。在...
MongoDB的MapReduce功能是基于分布式计算模型的一种数据处理方式,它允许用户在数据库中进行大规模数据处理。MapReduce的核心思想是将复杂的数据处理任务分解为两个主要阶段:Map阶段和Reduce阶段。 Map阶段是数据...
MongoDB的MapReduce是一种在大型数据集上进行并行计算的编程模型,尤其适用于数据分析任务。MapReduce由Google提出,其灵感来源于函数式编程语言中的Map和Reduce概念,旨在简化分布式计算,使得开发者无需深入理解...
MongoDB与Hadoop MapReduce的海量非结构化数据处理方案 本文旨在探索基于MongoDB与Hadoop MapReduce的海量非结构化数据处理方案,旨在解决大数据时代下的数据处理难题。该方案通过MongoDB Cluster、MongoDB-...
计算机后端-PHP视频教程. mongodb10 MapReduce 统计栏目下的商品.wmv
学习MongoDB不仅需要理解其基本的数据操作和管理,还需要了解其高级特性、集群部署、索引机制、日志系统、数据备份与恢复等方面的知识。接下来将基于提供的文件内容详细展开介绍MongoDB的相关知识点。 一、入门 1. ...
MongoDB的MapReduce是一个强大的工具,它允许开发者处理和聚合大量数据。MapReduce基于一种分布式计算模型,将大规模数据处理任务分解为两步:Map(映射)和Reduce(归约)。在这个过程中,MongoDB首先应用Map函数...
3. **MapReduce编程**:学习Java编程,实现MapReduce作业,理解数据分片、Map函数、Shuffle过程和Reduce函数。 4. **YARN**:下一代资源调度器,用于管理和分配集群资源,取代了最初的JobTracker。 5. **Hadoop生态*...
总之,“MongoDB视频”教程将引导你深入理解MongoDB的核心概念、操作技巧以及在实际应用中的最佳实践,无论你是初学者还是有经验的开发者,都能从中受益匪浅。通过观看和实践,相信你将在MongoDB的世界里游刃有余。
本"mongodb学习手册"提供了全面且清晰的指导,适合初学者和有一定经验的开发者深入理解MongoDB的核心概念和技术。 在手册中,你可能会遇到以下关键知识点: 1. **MongoDB基础**:首先,你会了解到MongoDB的基本...
计算机后端-PHP视频教程. mongodb08 导出导入.wmv
3. 性能优化:分享在实际操作中提高MongoDB性能的经验和技巧,如硬件选择、内存配置、查询优化等。 4. 集成开发:讲解如何将MongoDB与其他技术栈(如Node.js、Python、Java等)集成,以及如何在开发环境中使用...
### MongoDB入门学习知识点详解 #### 一、MongoDB简介与特点 MongoDB是一款非常流行的开源文档型NoSQL数据库系统,采用C++语言实现,具备高度的可扩展性和高性能。它适用于处理大规模的数据集,并提供了丰富的功能...