標籤:
淺嘗key-value資料庫(二)——MongoDB的優與劣
MongoDB的名字取自英文單詞"humongous"的中間五個字母,是一個C++開發的基於分布式檔案儲存體的資料庫開源項目。他的檔案儲存體格式是BSON(Binary JSON),因此可以高效儲存位元據,例像、視頻等大對象。
由於我是CentOS x86_64的系統,於是安裝MongoDB非常簡單:
vi /etc/yum.repos.d/mongo.repo
[10gen]
name=10gen Repository
baseurl=http://downloads.mongodb.org/distros/centos/5.4/os/x86_64/
gpgcheck=0
yum install mongo-stable mongo-stable-server mongo-stable-debuginfo
然後建一個資料目錄/var/db/mongo
啟動服務
mongod --dbpath /var/db/mongo --fork --logpath /var/log/mongodb.log --logappend
之後就可以通過預設連接埠27017訪問了。
mongo
>use d # 選擇資料庫d
>db.c.save({_id: 0, value: "abcd"}) # 在Collection c中存入{0, "abcd"}索引值對
>db.c.findOne({_id: 0}) # 在c中尋找主鍵為0的資料
>db.c.find() # 列出c中的所有資料
>use admin # 切換到admin模式
>db.shutdownServer() # 關閉MongoDB
那麼MongoDB的效能是否如同傳說中的那樣出色呢?我在一台配置為Xeon E5506 2.13GHz x 4,8G記憶體,1TB SATA硬碟的機器上進行了測試,結果如下:
寫入:
第一次插入500W條每條大小約2K的資料,耗時1050.2s,實際內容為12G左右,資料集佔用空間為22G
第二次再插入4500W條每條大小約2K的資料,耗時8614.4s,實際內容共為98G左右,資料集共佔有空間為137G
隨機讀取:
讀取32041次,耗時250.3s
可以看出,隨機讀的速度非常慢,也許是由於SATA磁碟I/O效能不足吧。另外,MongoDB的磁碟空間佔用也是在key-value資料庫中比較大的。
同時,同事做了與Tokyo Tyrant的對比,結論是效能差不多,磁碟空間佔用稍微少一點,但是TT似乎不支援分布式。由於我沒有拿到測試資料,在這裡就不細說了。在網上可以找到老趙做過的MongoDB和TT的比較——《MongoDB與Tokyo Tyrant效能比較》,他的測試結論是MongoDB效能有10~20%的優勢,也可以參考一下。
由於MongoDB磁碟空間佔用比較大,那麼他的分布式功能就刻不容緩了。MongoDB從1.6版本開始也提供了Sharding的介面,下一篇我們會來測試MongoDB的分布式。
淺嘗key-value資料庫(二)——MongoDB的優與劣