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 实例,该例子主要用来做订单统计的。具体问题请到博客提问。
NULL 博文链接:https://superhuo.iteye.com/blog/1193485
MongoDB MapReduce MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。这样做的好处是可以在任务被分解后,可以通过大量机器进行并行计算,减少...
Mongodb是针对大数据量环境下诞生的用于保存大数据量的非关系型数据库,针对大量的数据。接下来通过本文给大家介绍Mongodb中MapReduce实现数据聚合方法详解,感兴趣的朋友一起学习吧
MapReduce应该算是MongoDB操作中比较复杂的了,下面这篇文章主要给大家介绍了关于MongoDB中MapReduce使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。
MongoDB的MapReduce.pdf 学习资料 复习资料 教学资源
1.分篇章进行学习,内容控制30分钟内 2.1个月疗程,不要放弃治疗哦 3.图文并茂,有问题请发到邮箱
计算机后端-PHP视频教程. mongodb10 MapReduce 统计栏目下的商品.wmv
一个简单的Mongodb mapreduce的例子
主要介绍了MongoDB学习笔记之MapReduce使用示例,本文直接给出实例代码,需要的朋友可以参考下
MapReduce 是 Google 在 2004 年发布的一个软件框架,用于支持大规模数据的分布式计算。 MongoDB 是一个开源的面向文档的 NoSQL 数据库系统,使用 C++ 编写。
计算机后端-PHP视频教程. mongodb08 导出导入.wmv
作为一个优秀的编程模型,MapReduce在大数据处理中有很大的优势,而mongodb也支持这一编程模型,本文通过简单的单词计数示例论述在mongodb中如何使用MapReduce
Mongodb是主流的NOSQL数据库之一,Mongodb最佳实践,详细介绍了Mongodb使用以及底层原理...通过这些学习对Mongodb全方位的学习和理解,适应企业多元化数据库的需要,现在很多企业都在使用Mongodb,像360,百度,京东等
MongoDB五分钟教程:MongoDB Shell入门 基于MongoDB进行分布式数据存储的步骤 MongoDB分布式存储的MapReduce并行查询 实例:MongoDB与Tomcat的结合更便捷
#资源达人分享计划#