模拟大数据搜索场景--‐何旭东
创新互联建站是一家从事企业网站建设、成都做网站、网站建设、行业门户网站建设、网页设计制作的专业网站建设公司,拥有经验丰富的网站建设工程师和网页设计人员,具备各种规模与类型网站建设的实力,在网站建设领域树立了自己独特的设计风格。自公司成立以来曾独立设计制作的站点上1000+。请使用脚本插入本次课程中的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 人。 另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前文章:MongoDB-Map&Reduce-创新互联
本文网址:http://cxhlcq.com/article/iedhs.html