2013年5月30日 星期四

MongoDB 的特性

記錄一下同事在做 MongoDB 的效率測試時發現的一些特性(測試的版本是 MongoDB v2.4.3):

1、MongoDB 讀取資料(即 SELECT)時,不論資料長度大小,基本上都相當節省 CPU 和記憶體,效率也相當良好。

2、跟 MySQL 有點類似,在更新資料(即 UPDATE)時,MongoDB 效率也是蠻差的。單機連續更新幾萬筆資料,好像會費時很多個小時。

3、因為 MongoDB 每筆資料都要重新存一次欄位名稱,因此欄位名稱的長度變長的話,也會造成資料長度變長。變長的幅度很單純就是多一個英文字就多 1 byte。因此如果一筆資料中,所有欄位的欄位名稱加總起來,總共有 50 個英文字時,一百萬筆資料不含資料基本上要佔 50MB 的磁碟空間。

4、MongoDB 很不適合用來存單筆資料長度很長的資料,例如文章這類的東西。單機環境(未使用 Shard)一筆一筆連續插入(即 INSERT)時,如果一筆資料是約 20 Bytes,插入速度非常快;但如果一筆資料約 2 KB(即 2000 個字左右),插入近 40 萬筆資料需花費超過 6 個小時。

5、MongoDB 不適合建立大量的 Database,但基本上可以在一個 Database 裡建大量的 Collection。Database 數目大約超過 300 時,再繼續建 Database 的速度就會明顯下降,同時存取資料的速度也會下降。

6、跟 MySQL 或其他資料庫系統一樣,當單一 Collection 的資料數目大到一定程度後,建議還是要做 Collection 的分片,以維持存取的效率。

簡易地記錄還有印象的東西,不過完全沒有數據(都在同事那裏),測試環境我也不清楚,只知道是用虛擬機器做 Mongos 測試的。
同時本文內容以及上述這些測試完全沒有任何引用或參考的資料,因此以上的測試結果僅供參考

沒有留言: