2013-03-31 65 views
1

我無法從mongodb MapReduce文檔(http://docs.mongodb.org/manual/applications/map-reduce/)中瞭解這一段 - 哪些臨時集合(優化?)適合於(業務案例,優點等)?MongoDB中的臨時集合

臨時收集

的地圖,減少操作過程中使用的臨時 集合。完成後,map-reduce操作 重命名臨時集合。因此,您可以使用相同的目標集合名稱 定期執行 map-reduce操作,而不影響中間狀態。當 定期生成統計輸出集合時,請使用此模式。

回答

2

可以說你的{a:1}形式的文件的集合,並且定期你需要一個a的平均值。讓我們也說你想運行一個map-reduce作業,爲每個文檔增加一個「a」字段。然而,可能的是,雖然此地圖縮小正在運行,但也獲得平均值的作業正在運行。在這種情況下,如果您沒有臨時收藏,平均地圖可能會因爲地圖縮小作業尚未完成而丟失,從而使收藏處於中間狀態。

爲了避免這種情況,地圖縮小作業可以在臨時集合中工作直到完成。完成後,它將臨時集合重命名爲目標名稱,從而有效地交換新目錄。這樣,當您取「a」的平均值時,您會得到一個不受map-reduce作業影響的值。

讓我知道你是否想讓我澄清一點。

+0

實際上,試圖重讀它幾次,並以某種方式無法得到它:爲什麼我們應該有工作和map-reduce並行運行?爲什麼平均值會被拋出,以及它與臨時收集有什麼關係,「我現在不會收到」?如果「是」,那麼會發生什麼,而如果是「不」? – BreakPhreak

+1

使用臨時集合的意義在於,您可以同時運行多個作業。如果map-reduce無法在臨時集合中運行,則兩個作業可能會在它們同時運行時互相干擾。平均值將被修改,因爲當一個過程正在對這些值進行求和時,另一個過程正在改變這些值,所以它們接觸這些值的順序會影響最終的平均值。請注意我明白你的最後一個問題 – ACE