模拟大数据搜索场景--‐何旭东
云和ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!
请使用脚本插入本次课程中的Map&Reduce举例的学生表到1000w条文档。字段
保持不变。
使用Map&Reduce 计算出10 请提交Map&Reduce 程序,已经对应的计算结果。 > db.users.count(); 10000000 > db.users.find(); { "_id" : ObjectId("55ca9ae785b177a46da9494f"), "classid" : 1, "age" : 37, "name" : "name0" } { "_id" : ObjectId("55ca9ae785b177a46da94950"), "classid" : 1, "age" : 12, "name" : "name1" } { "_id" : ObjectId("55ca9ae785b177a46da94951"), "classid" : 1, "age" : 31, "name" : "name2" } { "_id" : ObjectId("55ca9ae785b177a46da94952"), "classid" : 2, "age" : 27, "name" : "name3" } 脚本创建模拟数据: for (var i=1; i<10000000;i++){ db.users.save({classid:Math.ceil(Math.random()*(2)),age:Math.cei l(Math.random()*(38-8)+8),name:"name"+i}) }; Map 函数 Map 函数必须调用emit(key,value)返回键值对。使用this 返回当前待 处理的文档。 > mapf = function(){emit(this.classid, 1)} function (){emit(this.classid, 1)} Reduce 函数 Reduce 函数接收的参数类似Group 效果,已经按照健聚合过一次 将Map 返回的键值序列组合成{key, [value1,value2,value3,....,valuen]}传递给 Reduce,Reduce 函数对values 统计 > reducef=function (key, values) { ... var count = 0; ... values.forEach(function (v) {count += v;}); return count; ... } function (key, values) { var count = 0; values.forEach(function (v) {count += v;}); return count; } Options 更多的控制细节 > res = db.runCommand({ mapreduce:"users", map:mapf, reduce:reducef, out:"users_res", finalize:ff, query:{age:{$lt:10}} ... }); { "result" : "users_res", "timeMillis" : 6251, "counts" : { "input" : 333716, "emit" : 333716, "reduce" : 6676, "output" : 2 }, "ok" : 1 } > 结果: > db.users_res.find(); { "_id" : 1, "value" : { "classid" : 1, "count" : 167142 } } { "_id" : 2, "value" : { "classid" : 2, "count" : 166574 } } 1 班小于10 岁的有167142 人。2 班小于10 岁的有166574 人。 继续统计小于20 岁以下,每个班学生的个数: > res = db.runCommand({ mapreduce:"users", map:mapf, reduce:reducef, out:"users_2res", finalize:ff, query:{age:{$lt:20}} ... ... }); { "result" : "users_2res", "timeMillis" : 23247, "counts" : { "input" : 3666243, "emit" : 3666243, "reduce" : 73326, "output" : 2 }, "ok" : 1 } > db.users_2res.find(); { "_id" : 1, "value" : { "classid" : 1, "count" : 1832306 } } { "_id" : 2, "value" : { "classid" : 2, "count" : 1833937 } } 1 班小于20 岁的有1832306 人。2 班小于20 岁的有1833937 人。
本文名称:MongoDB-Map&Reduce
URL分享:http://cdxtjz.com/article/gdchie.html