MongoDB:Map-Reduce,mongodbmap-reduce
Map-reduce是一個考慮大型資料得到有用聚集結果的資料處理程式(paradigm).針對map-reduce操作,MongoDB提供來mapreduce命令.
考慮下面的map-reduce操作:
在這個map-reduce操作裡,MongoDB為每個輸入的文檔(比如,集合中滿足了查詢條件的文檔)應用了map操作.Map函數輸入鍵值對.對擁有多個值的那些鍵,MongoDB採用reduce階段,即收集和壓縮聚集的資料.Mongo-DB然後把結果存在一個集合裡面.Reduce函數的輸出可以選擇傳遞給一個finalize函數去進一步壓縮或處理聚集結果.
在MongoDB中,所有的map-reduce函數都是javascript代碼,都運行在mongod進程.Map-reduce操作接受一個集合的文檔作為輸入,並可以在map階段之前執行任意排序和限制.mapreduce可以以一個文檔的形式返回map-reduce操作的結果,或者可能往集合寫入結果。輸入和輸出的集合可能是共用的。
註:
對大多數的聚集操作,聚集管道提供了更好的效能和更一致的介面。然而,map-reduce操作提供了在聚集管道所沒有的靈活性。
Map-Reduce JavaScript 函數
在MongoDB,map-reduce操作使用自訂的函數去map,或者進行鍵和值的關聯。如果一個鍵有多個值和它對應,則reduce操作將該鍵的值“減”到單一的對象(the operation reduces the values for the key to a single object)。
自訂的javascript函數給map-reduce帶來了靈活性。舉個例子,當處理一個文檔,map函數產生多於一個的鍵值對匹配或者沒有鍵值對匹配。Map-reduce函數也可以使用一個自訂的javascript函數在map和reduce函數操作結束時對結果進行最終的修改。
Map-Reduce 行為
在MongoDB,map-reduce函數能夠聯機往集合寫入結果或返回結果。如果你將map-reduce的輸出寫入一個集合,你可以在相同的輸入集合上執行隨後的map-reduce操作,並會合并替代、合并,或者削減之前的結果。
當聯機返回map-reduce操作的結果,結果文檔必須在BSON Document Size限制內,目前是16M。
MongoDB支援在共用集合上的map-reduce操作,也能向共用集合輸出結果。
誰懂mongodb的mapreduce 教我一下?
map:可以理解成需要填充的資料。在sql中,很像是後面的where條件所需要篩選的部分;
reduce:可以理解成需要顯示的欄位;
因為mapreduce的使用對於初學者來說,在理解上非常的困難。建議先從簡單的group方法入手進行學習;
另外一點,MapReduce的效能是非常低的,除非是做背景統計操作,否則一定不要用MapReduce或給予它的查詢作為前端的資料訪問方式。
mongoDB適用什場合?
根據官方網站的描述,Mongo適合用於以下情境:
◆網站資料:Mongo非常適合即時的插入,更新與查詢,並具備網站即時資料儲存所需的複製及高度伸縮性。
◆緩衝:由於效能很高,Mongo也適合作為資訊基礎設施的緩衝層。在系統重啟之後,由Mongo搭建的持久化緩衝層可以避免下層的資料來源過載。
◆大尺寸,低價值的資料:使用傳統的關係型資料庫儲存一些資料時可能會比較昂貴,在此之前,很多時候程式員往往會選擇傳統的檔案進行儲存。
◆高伸縮性的情境:Mongo非常適合由數十或數百台伺服器組成的資料庫。Mongo的路線圖中已經包含對MapReduce引擎的內建支援。
◆用於對象及JSON資料的儲存:Mongo的BSON資料格式非常適合文檔化格式的儲存及查詢。
自然,MongoDB的使用也會有一些限制,例如它不適合:
◆高度事務性的系統:例如銀行或會計系統。傳統的關係型資料庫目前還是更適用於需要大量原子性複雜事務的應用程式。
◆傳統的商業智慧應用:針對特定問題的BI資料庫會對產生高度最佳化的查詢方式。對於此類應用,資料倉儲可能是更合適的選擇。