2012-04-02 81 views
2

我在Linux 64位機器上運行一個用於rails 3應用程序(使用mongoid適配器)的MongoDB。我正在進行150萬條記錄的批量上傳,總計大約2GB的數據。我正在使用我編寫的腳本(通過輸入文件檢索單個記錄並一次將其插入到MongoDB中)加載數據。如果我放下所有東西並且不查詢數據庫,這將工作得很好。MongoDB全局鎖定:同時讀取和插入大量數據

但是,在一個加載過程中,我通過我的應用程序查詢了數據庫,並嘗試檢索MongoDB中迄今爲止所有的記錄(當時大約爲700,000)。這導致我的加載腳本超時。

問題是,在試圖插入數據時,MongoDB的全局鎖定是否可能在查詢期間停止整個數據庫,導致加載腳本超時?我只需要知道是否有可能。我認爲全局鎖定對於讀/寫是不同的。

我知道每個系統和配置的確切時間可能不同,但我試圖看看這是否可行,所以我可以爲未來作相應的準備。

回答

0

與大多數系統一樣,寫入鎖定優先於讀取鎖定。

隨着全球鎖,你可以有一個作家許多讀者

如果你有一個寫鎖活躍,讀鎖會排隊。

你的磁盤在系統下面看起來像什麼?這也可能有助於讀寫的性能備份,這會加劇鎖定。

-1

首先,如果你想有一批加載所有數據,你可以定義不同於其他操作的mongo連接。 所以你的應用程序可以有多個具有不同超時定義的Mongo對象。 在Mongo 2.0中,他們改進了鎖定並將其改進爲mongo2.2 但是,這總是一個問題,您希望某些讀取操作速度非常快,其他一些讀取速度較慢,對於寫入,您可以有不同的延遲定義。