在執行操作時,MongoDB映射是否會減少鎖定集合?MongoDB - 如何鎖定Map Reduce的工作?
我有一些應用程序廣泛和密集使用的集合。 Map/Reduce通過cron作業每隔10分鐘在後臺運行,並在該廣泛和集中使用的集合中運行。
我想知道Map/Reduce是否因爲其他操作正在進行(插入,更新和大部分讀取)而無法正常執行。特別是,我想知道Map/Reduce是否會干擾用戶對集合執行的正常操作。
在執行操作時,MongoDB映射是否會減少鎖定集合?MongoDB - 如何鎖定Map Reduce的工作?
我有一些應用程序廣泛和密集使用的集合。 Map/Reduce通過cron作業每隔10分鐘在後臺運行,並在該廣泛和集中使用的集合中運行。
我想知道Map/Reduce是否因爲其他操作正在進行(插入,更新和大部分讀取)而無法正常執行。特別是,我想知道Map/Reduce是否會干擾用戶對集合執行的正常操作。
MapReduce,如果輸出到一個集合,它將寫入多個寫鎖(因爲任何操作正在創建/更新集合)。如果你正在做一個在線MR,那麼你可以避免這種鎖定(但對結果大小有限制)。即使如此,仍然有讀鎖和Javascript鎖(現在mongoDB上的服務器端JS單線程)。
這一切解釋(如果它的變化將被更新)位置:
http://www.mongodb.org/display/DOCS/How+does+concurrency+work#Howdoesconcurrencywork-MapReduce
注:SpiderMonkey的到V8 JS引擎遷移問題是那些看,如果多線程是你的關注。
如果我理解正確,當mapreduce完成工作並且正在進行輸出「temp_result_collection」時,在那個即時mongodb鎖定中,同時其他操作的請求在隊列中,因爲mapreduce輸出結束了嗎?但如果輸出需要幾秒鐘(例如10秒,因爲它是大輸出),這不是問題。但是,當mapreduce從集合中讀取數據來處理它(運行發射和減少funcion)時,它保持對初始集合的鎖定?我問這個是因爲我在mongodb中實現了一個投票系統,並且我將選票存儲爲diff對象中每個對象的嵌套文檔 – paganotti 2012-03-26 12:23:04
「它從一個集合中讀取(讀鎖產生每100個文檔)」所以,如果用戶同時諮詢其中一個記錄是被鎖定的用戶等待,直到它被釋放到那100個文檔中,所以讀取操作由用戶執行,它被放入隊列中,所以它不會返回錯誤,對嗎? – paganotti 2012-03-26 12:36:29
首先,爲了充分利用收益,請確保您使用的是2.x版本(當前爲2.0.4),其收益率得到了改善。 100個文檔不是鎖定單位,而是MR作業取出讀取鎖(允許多個讀取鎖)並每100個文檔生成一個。爲什麼?因爲寫鎖是獨佔的,所以如果寫等待,收益將允許寫入發生。看看Dwight在10gen.com上的演示,瞭解所有這些工作的更詳細和翔實的解釋。 – 2012-03-26 14:32:18
可能的重複:http://stackoverflow.com/questions/5563172/does-mongodb-mapreduce-lock-the-database – beny23 2012-03-26 10:57:18
好的謝謝,所以它是有點假設。 – paganotti 2012-03-26 11:09:25