MapReduce初探之一~~基于Mongodb实现标签统计
咋一看,怎么就是分布式计算的原理图解了?论道分布式计算,就扯远了,回到主题上,这次是讨论如何利用MapReduce的思想,实现Blog文章标签的统计!
按照传统的关系数据库设计,统计标签,无非就是建一张标签表,我们姑且叫左Tb_tags,大致的结构就是id和value,然后关联id到Blog表的外键上。恩,不差错。可是这次,NodeBlog的数据库用的可是Mongodb哦,难道照搬即可?
我们先看看在mongodb下,Blog表是如何描述的:
/** * 统计Blog中标签出现的次数,采用MapReduce进行实时计算 * @param callback --> result: _id(tag name), value(occupied count) */exports.tagStatistical = function(callback){ var o = {}; o.map = function () { this.tags.forEach(function(z){ //z即是具体的某个tag了 emit(z,1); //对某个tag出现一次就计数一次 }); } o.reduce = function (k, values) { var total=0; for(var i=0;i<values.length;i++){ total += values[i]; } return total; } Blog.mapReduce(o, function (err, results) { if(err) { console.log("mapReduce err:"+err); } console.log(results); callback(results); })}
最后我们通过callback函数获得的result事实上就是(tag,count)的Map了,这是如何实现的?这点,就有赖于Mongodb的高级特性了,Mongodb对于?MapReduce?是骨子里支持的,因而这种运算的效率是有保障的!难怪Mongodb的掌门人叫嚣:不是Mongodb不行,是你们不懂Mongodb!??
总结一下,尽管这篇Blog讲得有点乱,但是主要还是想讲清楚MapReduce的思想!?MapReduce的实现五花八门,但是其中心思想~map和reduce才是我们必须理解和掌握的!
?
本文由zhiweiofli编辑发布,转载请注明出处,点击,谢谢。