在 MongoDB 上使用 Map/Reduce進(jìn)行并行"統(tǒng)計"很容易。
使用 MapReduce 要實(shí)現(xiàn)兩個函數(shù) Map 函數(shù)和 Reduce 函數(shù),Map 函數(shù)調(diào)用 emit(key, value),
遍歷 collection 中所有的記錄, 將key 與 value 傳遞給 Reduce 函數(shù)進(jìn)行處理。
Map函數(shù)和Reduce函數(shù)可以使用 JavaScript 來實(shí)現(xiàn),可以通過 db.runCommand 或 mapReduce 命令來執(zhí)行一個MapReduce 的操作:
參數(shù)說明:
mapreduce: 要操作的目標(biāo)集合。
map: 映射函數(shù) (生成鍵值對序列,作為 reduce 函數(shù)參數(shù))。
reduce: 統(tǒng)計函數(shù)。
out: 統(tǒng)計結(jié)果存放集合 (不指定則使用臨時集合,在客戶端斷開后自動刪除)。
query: 目標(biāo)記錄過濾
sort: 目標(biāo)記錄排序。
limit: 限制目標(biāo)記錄數(shù)量。
finalize: 最終處理函數(shù) (對 reduce 返回結(jié)果進(jìn)行最終整理后存入結(jié)果集合)
scope: 向 map、reduce、finalize 導(dǎo)入外部變量。
jsMode: 是否轉(zhuǎn)換Bson格式在map和reduce執(zhí)行間
verbose: 顯示詳細(xì)的時間統(tǒng)計信息。
下面我們來搞一個例子吧:
準(zhǔn)備一些數(shù)據(jù):
接下來我們演示如何統(tǒng)計各個班的學(xué)生數(shù)量
Map:
Map 函數(shù)必須調(diào)用 emit(key, value) 返回鍵值對,使用 this 訪問當(dāng)前待處理的 Document。
m = function(){ emit(this.classid,1); }value 可以使用 JSON Object 傳遞 (支持多個屬性值)。
例如:emit(this.classid, {count:1})
Reduce:
Reduce 函數(shù)接收的參數(shù)類似 Group 效果,將 Map 返回的鍵值序列組合成 { key, [value1,
value2, value3, value...] } 傳遞給 reduce。
Reduce 函數(shù)對這些 values 進(jìn)行 "統(tǒng)計" 操作,返回結(jié)果可以使用 JSON Object。
Result:
mapReduce() 將結(jié)果存儲在 "students_res" 表中。
Finalize:
利用 finalize() 我們可以對 reduce() 的結(jié)果做進(jìn)一步處理。
f = function(key,value){ return {classid:key,count:value} }我們再重新計算一次,看看結(jié)果:
Options:
我們還可以添加更多的控制細(xì)節(jié)。
db.runCommand({ mapreduce:"stu", map:m, reduce:r, out:"stu_res", finalize:f, query:{age:{$gt:10}} });可以看到先進(jìn)行了過濾,只取 age>10 的數(shù)據(jù),然后再進(jìn)行統(tǒng)計,所以就沒有 age=9 的數(shù)
據(jù)了。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
名稱欄目:MongoDB實(shí)戰(zhàn)(4)MapReduce-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://chinadenli.net/article12/dgjcdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、動態(tài)網(wǎng)站、電子商務(wù)、App開發(fā)、關(guān)鍵詞優(yōu)化、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容