模擬大數(shù)據(jù)搜索場景--‐何旭東
創(chuàng)新互聯(lián)建站是一家從事企業(yè)網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)站建設(shè)、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)制作的專業(yè)網(wǎng)站建設(shè)公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計(jì)人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)上1000+。請使用腳本插入本次課程中的Map&Reduce舉例的學(xué)生表到1000w條文檔。字段
保持不變。
使用Map&Reduce 計(jì)算出10 請?zhí)峤籑ap&Reduce 程序,已經(jīng)對應(yīng)的計(jì)算結(jié)果。 > 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" } 腳本創(chuàng)建模擬數(shù)據(jù): 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 函數(shù) Map 函數(shù)必須調(diào)用emit(key,value)返回鍵值對。使用this 返回當(dāng)前待 處理的文檔。 > mapf = function(){emit(this.classid, 1)} function (){emit(this.classid, 1)} Reduce 函數(shù) Reduce 函數(shù)接收的參數(shù)類似Group 效果,已經(jīng)按照健聚合過一次 將Map 返回的鍵值序列組合成{key, [value1,value2,value3,....,valuen]}傳遞給 Reduce,Reduce 函數(shù)對values 統(tǒng)計(jì) > 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 更多的控制細(xì)節(jié) > 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 } > 結(jié)果: > db.users_res.find(); { "_id" : 1, "value" : { "classid" : 1, "count" : 167142 } } { "_id" : 2, "value" : { "classid" : 2, "count" : 166574 } } 1 班小于10 歲的有167142 人。2 班小于10 歲的有166574 人。 繼續(xù)統(tǒng)計(jì)小于20 歲以下,每個(gè)班學(xué)生的個(gè)數(shù): > 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 人。 另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁名稱:MongoDB-Map&Reduce-創(chuàng)新互聯(lián)
標(biāo)題URL:http://weahome.cn/article/iedhs.html