MongoDB Middle Level---> 大数据量下MapReduce取代GroupBy

MongoDB中的MapReduce其实更类似关系型数据库中的GroupBy 。

刚做了下这样试验,对于大数据量的GroupBy(MapReduce)还是比较理想的,生成100W条3位随机字符串

for (var i=0; i<1000000; i++) { var x = "0123456789"; var tmp=""; for (var j=0; j<3; j++) { tmp += x.charAt(Math.ceil(Math.random()*100000000)%x.length);| } var u = {_id:i,v1:tmp}; db.RandomNum.insert(u); }

然后进行对相同的随机数取Count数 所以必须GroupBy


var m = function(){emit(this.v1,{count:1}); }; //map key类似关系型数据的group by 第二个是value 就是要进行聚合的字段(sum...) var r = function (key,values) { var total = 0;for (var i=0; i<values.length; i++) { total += values[i].count; } return {count : total}; };. //reduce var res = db.RandomNum.mapReduce(m, r, {out:{replace:'Result'}}); db[res.result].find()


测试了下时间:

var startTime = new Date(); var m = function(){emit(this.v1,{count:1}); }; var r = function (key,values) { var total = 0;for (var i=0; i<values.length; i++) { total += values[i].count; } return {count : total}; }; var res = db.RandomNum.mapReduce(m, r, {out:{replace:'Result'}}); db[res.result].find() (new Date().getTime()-startTime.getTime())/1000
结果如下:

> db[res.result].find() { "_id" : "000", "value" : { "count" : 1075 } } { "_id" : "001", "value" : { "count" : 1045 } } { "_id" : "002", "value" : { "count" : 1022 } } { "_id" : "003", "value" : { "count" : 968 } } { "_id" : "004", "value" : { "count" : 994 } } { "_id" : "005", "value" : { "count" : 1009 } } { "_id" : "006", "value" : { "count" : 948 } } { "_id" : "007", "value" : { "count" : 1003 } } { "_id" : "008", "value" : { "count" : 983 } } { "_id" : "009", "value" : { "count" : 993 } } { "_id" : "010", "value" : { "count" : 987 } } { "_id" : "011", "value" : { "count" : 982 } } { "_id" : "012", "value" : { "count" : 957 } } { "_id" : "013", "value" : { "count" : 1031 } } { "_id" : "014", "value" : { "count" : 971 } } { "_id" : "015", "value" : { "count" : 1053 } } { "_id" : "016", "value" : { "count" : 974 } } { "_id" : "017", "value" : { "count" : 975 } } { "_id" : "018", "value" : { "count" : 978 } } { "_id" : "019", "value" : { "count" : 1010 } } has more > > (new Date().getTime()-startTime.getTime())/1000 63.335s > bye

测试机的性能:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值