MongoDB中的MapReduce简介
MongoDBMapReduce
MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。这样做的好处是可以在任务被分解后,可以通过大量机器进行并行计算,减少整个操作的时间。
上面是MapReduce的理论部分,下面说实际的应用,下面以MongoDBMapReduce为例说明。
下面是MongoDB官方的一个例子:
>db.things.insert({_id:1,tags:['dog','cat']}); >db.things.insert({_id:2,tags:['cat']}); >db.things.insert({_id:3,tags:['mouse','cat','dog']}); >db.things.insert({_id:4,tags:[] });
>//mapfunction >map=function(){ ... this.tags.forEach( ... function(z){ ... emit(z,{count:1}); ... } ... ); ...};
>//reducefunction >reduce=function(key,values){ ... vartotal=0; ... for(vari=0;i<values.length;i++) ... total+=values[i].count; ... return{count:total}; ...};
db.things.mapReduce(map,reduce,{out:'tmp'}) { "result":"tmp", "timeMillis":316, "counts":{ "input":4, "emit":6, "output":3 }, "ok":1, } >db.tmp.find() {"_id":"cat","value":{"count":3}} {"_id":"dog","value":{"count":2}} {"_id":"mouse","value":{"count":1}}