標籤:blog http io ar os 使用 sp for java
出處:http://www.csdn.net/article/2011-03-21/294226
本文見於MongoDB官方網站,MongoDB與CouchDB很相似,他們都是文檔型儲存,資料存放區格式都是JSON型的,都使用Javascript進行操作,都支援Map/Reduce。但是其實二者有著很多本質的區別,本文透過現象追尋本質,讓你更好的理解MongoDB與CouchDB。
1.MVCC(Multiversion concurrency control)
MongoDB與CouchDB的一大區別就是CouchDB是一個MVCC的系統,而MongoDB是一個update-in-place的系統。這二者的區別就是,MongoDB進行寫操作時都是即時完成寫操作,寫操作成功則資料就寫成功了,而CouchDB一個支援多版本控制的系統,此類系統通常支援多個結點寫,而系統會檢測到多個系統的寫操作之間的衝突並以一定的演算法規則予以解決。
2.水平擴充性
在擴充性方面,CouchDB使用replication去做,而MongoDB的replication僅僅用來增強資料的可靠性,MongoDB在實現水平擴充性方面使用的是Sharding。(據說CouchDB也有開發分區功能的計劃)
3.資料查詢操作
這個區別在使用者介面上了,MongoDB與傳統的資料庫系統類別似,支援動態查詢,即使在沒有建立索引的行上,也能進行任意的查詢。而CouchDB不同,CouchDB不支援動態查詢,你必須為你的每一個查詢模式建立相應的view,並在此view的基礎上進行查詢。
4.原子性
這一點上兩者比較一致,都支援針對行的原子性修改(concurrent modifications of single documents),但不支援更多的複雜事務操作。
5.資料可靠性
CouchDB是一個”crash-only”的系統,你可以在任何時候停掉CouchDB並能保證資料的一致性。而MongoDB在不正常的停掉後需要運repairDatabase()命令來修複資料檔案,在1.7.5版本後支援單機可靠的–dur命令。
6.Map/Reduce
MongoDB和CouchDB都支援Map/Reduce,不同的是MongoDB只有在資料統計操作中會用到,而CouchDB在變通查詢時也是使用Map/Reduce。
7.使用 javascript
MongoDB和CouchDB都支援javascript,CouchDb用javascript來建立view。MongoDB使用JSON作為普通資料庫操作的運算式。當然你也可以在操作中包含javascript語句。MongoDB還支援服務端的javascript指令碼(running arbitrary javascript functions server-side),當然,MongoDB的Map/Reduce函數也是javascript格式的。
8.REST
CouchDB是一個RESTFul的資料庫,其操作完全走HTTP協議,而MongoDB是走的自己的二進位協議。MongoDB Server在啟動時可以開放一個HTTP的介面供狀態監控。
9.效能
此處主要列舉了MongoDB自己具有高效能的原因
採用二進位協議,而非CouchDB REST的HTTP協議
使用Momary Map記憶體映射的做法
collection-oriented,面向集合的儲存,同一個collection的資料是連續儲存的
update-in-place直接修改,而非使用MVCC的機制
使用C++編寫
10.適用情境
如果你在構建一個 Lotus Notes型的應用,我們推薦使用CouchDB,主要是由於它的MVCC機制。另外如果我們需要master-master的架構,需要基於地理位置的資料分布,或者在資料結點可能不線上的情況下,我們推薦使用CouchDB。
如果你需要高效能的儲存服務,那我們推薦MongoDB,比如用於儲存大型網站的使用者個人資訊,比如用於構建在其它儲存層之上的Cache層。
如果你的需求中有大量update操作,那麼使用MongoDB吧。就像我們在例子updating real time analytics counters中的一樣,對於那種經常變化的資料,比如瀏覽量,訪問數之類的資料存放區。
原文連結:Comparing Mongo DB and Couch DB
譯文連結:http://blog.nosqlfan.com/html/1519.html
MongoDB與CouchDB全方位對比(轉)