2011-10-21 44 views
2

我有一個簡單的數據集,幾個集合,在MongoDB 2.0(以前的1.8)中,每個文檔中不超過20個 文檔。當涉及到查詢數據時,我得到的結果很差 (至少我認爲他們可能是 更好看http://mongoid.org/performance.html)。起初, 雖然我在Ruby(Mongoid)中使用的映射器是個問題,但是我做了一些更多的測試,它似乎更關係到數據庫 本身。MongoDB糟糕的讀取性能

我已經做了一個簡單的基準測試,我通過它的ID查詢相同的文檔10000 次,首先使用Ruby Mongo驅動程序,然後使用Mongoid。該 結果:

   user  system  total  real 
driver 7.670000 0.380000 8.050000 ( 8.770334) 
mongoid 9.180000 0.380000 9.560000 (10.384077) 

的代碼是在這裏:https://gist.github.com/1303536 的機器,我在測試這是一個酷睿2雙核P8400 2.27 GHz,具有4 GB的運行Ubuntu 11.04 RAM。 我還使用pymongo進行了類似的測試,以檢查Ruby驅動程序中的問題是否存在 ,但結果僅略好( 10000請求的5-6秒)。

我獲取該文件的bsonsize是67.有一些小 嵌入文檔,但不超過100.一些嵌入式 證件是指由ID等收藏文件,但這個AFAIR關係 是由映射器處理,所以它不應該影響性能。用explain()直接在數據庫中讀取此文檔,結果爲毫秒= 0.

奇怪的是,在測試期間,HDD LED始終閃爍一直閃爍。在 第一次讀取後,Mongo不應該將這個文件緩存在RAM中?有什麼明顯的我可以錯過?或者是這個 不是一個糟糕的結果(但與http://mongoid.org/performance.html 它確實看起來不好)?

+1

如果您分享了您的所有代碼,這將非常有用。一眼看來,你似乎在循環內檢索一個元組的做法遠不止於此。首先,你似乎反覆選擇收藏。 –

+0

我應該分享哪些更多的代碼?讓我們解開Mongoid測試吧 - 這裏沒什麼關係。所以,整個代碼就是要點。 Python的版本是相同的,我想,以防萬一我把它[這裏](https://gist.github.com/1303871)。 –

+0

在此期間,您是否在您的mongostat運行中看到錯誤/秒?無論哪種方式,這可能發生的原因有很多。嘗試用JSON/JS重寫你的測試,這樣即使不熟悉Mongoid的人也能幫助你。 –

回答

0

我刪除並重新創建了數據庫。也許是因爲從1.8到2.0。無論如何,硬盤指示燈停止閃爍,現在一切都快2-3倍。

我也仔細查看了用於基準Mongoid的測試,這個結果(0.001s)只是一個find(),而不是一百萬。我告訴Mongoid的作者,我認爲網站上沒有明確說明操作次數只適用於其中一些操作。

對不起,我感到困惑。