2013-12-20 49 views
5

慢得多我有這個兩個蒙戈命令,在我看來應該導致同樣的結果:MongoDB的runCommand比直接調用

for(var i=0;i<1000;i++){db.test.insert({a:1}); db.getLastError({j:1, w:1});}; 

for(var i=0;i<1000;i++){db.test.insert({a:1}); db.runCommand({getLastError:1, j:1, w:1});}; 

兩個命令正確執行插入,然而,第二個是CCA 100倍時間更慢(500ms vs 45s)。有誰知道,爲什麼這樣?只有在設置{j:1}時纔會出現差異,所以它可能與某些日記問題有關?

+0

只是好奇 - 當fsync設置爲true會發生什麼?日誌功能是否啓用? –

+0

fsync不會改變任何東西(至少對我而言)。我有2.4.8版本的MongoDB,但我沒有更改日記的默認選項,因此應該啓用它。 –

回答

1

第二個命令實際上是在等待日誌提交,而第一個命令不是,因此也是差異。當使用getLastError外殼幫助程序時,您無法傳入j選項。它應該是一個數字或字符串,對應於getlasterror數據庫命令的w參數,如文檔here所述。

+0

感謝您的回答,它幫助了我很多。你知道嗎,這些信息是否可以在文檔的某個地方找到? (getLastError部分沒問題,但沒有提及使用getLastError作爲shell幫助器) –