|
英文原文:CouchDB versus Couchbase: What are the differences, and what happened to Membase?
原文發布于 2012 年 5 月 17 日
2012年2月,CouchOne與Membase合并了,合并之后的公司叫做Couchbase。Membase公司有一個名為Membase的產品,它是個鍵/值、持久化、可伸縮的解決方案,使用了memcached wire協議。CouchDB是個文檔數據庫,提供了端到端的復制方法,這對于移動與分布在不同位置的數據中心來說是很有用的。Couchbase基于Membase與CouchDB開發了一款新產品,新產品的名字叫做Couchbase。
近日,Couchbase發表了一篇文章,比較了Couchbase與CouchDB,指出了這兩者之間的差別與相似點。這篇文章重點回答了這樣一個問題:“CouchDB與Couchbase有哪些差別”?
實際情況是Couchbase與CouchDB是緊密相關的。Couchbase產品包含了CouchDB的一個副本。Couchbase產品向CouchDB添加了緩存、集群等功能。InfoQ有幸采訪到了Couchbase創始人之一的James Phillips以詳細了解Membase與CouchDB這兩個產品之間的差別與融合。
InfoQ:Membase是個非常強勁的品牌,你們為何會將產品名變更為Couchbase呢?
去年初,Membase公司與CouchOne公司合并了。合并之后的公司名取自每個公司名的一部分,即Couchbase。從根本上來說,名字的變化更好地反映了我們所提供的技術——Couchbase是個面向文檔的數據庫(其所用的技術來自于Apache CouchDB項目),能夠實現水平伸縮,并且對于數據的讀寫來說都能提供低延遲的訪問(這要歸功于Membase技術)。
InfoQ:在選擇CouchDB作為持久化與查詢引擎前,Membase使用的是什么?
SQLite是Membase使用的嵌入式存儲引擎,在Couchbase Server中已經被Apache CouchDB技術替代了。
InfoQ:對于Membase的使用來說,memcached wire協議的重要性如何?
對于Membase和現在的Couchbase Server(支持同樣的wire協議)使用來說,Memcached兼容性是非常重要的。每種語言與應用開發框架都原生支持memcached,大多數開發者都曾使用過memcached,因此很容易就可以上手Membase并開始使用。
InfoQ:Membase看起來是個很不錯的解決方案,當然了,它也擁有一些大名鼎鼎的客戶與使用案例,如Zynga等。通過將Membase客戶所希望的CouchDB作為持久/查詢層,你們能得到什么呢?
通常,Couchbase用作交互式軟件系統的記錄系統——取代了之前由MySQL或Oracle等關系數據庫技術所扮演的角色。Membase所支持的鍵——值操作當然可以構建可用的系統,但簡單的鍵——值存儲對于一些相當簡單的問題卻是無能為力的,比如“哪些用戶的農場中有綿羊”?為了基于純粹的鍵——值存儲來回答這個問題,應用必須得讀取整個數據庫,一個鍵一個鍵地讀,然后“查看”鍵——值對的值部分以確定里面是否有綿羊。通過嵌入CouchDB,數據庫現在可以在應用中完成這個任務,無需掃描整個數據庫(因為CouchDB可以維護能夠加速這種查詢的索引)。
InfoQ:在NoSQL、分布式數據領域中誰是你最大的競爭對手?
MongoDB。
InfoQ:CouchBase與MongoDB都是面向文檔的且取得了相當大的成功。相比于Cassandra(BigTable/Dynamo hybrid)之類的面向列的數據庫來說,面向文檔的數據庫有哪些優勢呢?
對于面向文檔的數據庫來說,應用可以在無需考慮結構的情況下插入記錄(即“文檔”),只要他們遵循某些標準的格式化規則(如XML、JSON)即可。接下來,無論是否定義了某些列,你都可以執行查詢,但面向列的數據庫則要求維護一個列簇、或是父列、或是其他類型的結構。面向文檔的模型為事務性的數據管理提供了一個更加靈活、通用性的方式,同時又不會限制執行的查詢種類。
InfoQ:Couchdb/Couchbase比較的文章中提到了couchbase向CouchDB增加了自動分片的功能。除了核心CouchDB所提供的功能外,Couchbase是否增加了對復制、高可用性之類的支持呢?
Couchbase Server實際上提供了兩種“復制”技術:對于內部數據中心部署(集群)來說,它使用了Membase風格的復制(在網絡分區的情況下提供了快速的一致性),因為它提供了最自然的部署模型,從統計學上來說,網絡分區中出現腦裂(split-brain)的可能性要比數據中心出現碰撞的可能性低。對于交互數據中心部署(集群從地理位置來說是分布式的)來說,網絡分區中出現腦裂的可能性是相當高的,因為應用服務器與數據庫服務器位于相對脆弱的WAN連接的兩端。在跨數據中心的部署中使用了CouchDB風格的復制,因為它支持碰撞檢測和決議,而在這種場景中此情況是很可能會出現的。
InfoQ:Couchbase使用Membase替換掉了Memcached,因此使用Memcached的應用可以很輕松地使用Couchbase,但不帶自動分片功能的客戶端驅動該如何使用Couchbase的自動分片特性呢?
Couchbase Server中內建一個代理層(叫做moxi),或是將該代理層部署到應用服務器上,它會填平“現有”memcached客戶端所用的一致性哈希算法與Couchbase Server所用的兩級間接(通過哈希找到虛擬服務器,然后將虛擬服務器映射為真實服務器)之間的溝壑。
InfoQ:Couchbase是如何解決應用需要可靠的持久化這一問題的?有日志選項么?是否有數據需要復制到多個結點的選項?你們是如何平衡寫速度與可靠的持久化的?你們是否至少需要兩臺服務器來保證持久性呢?
你可以配置Couchbase(基于每個操作),使之立刻(異步寫)、完成了數據的復制或是數據寫到了持久化媒體后才對寫操作進行響應。用戶可以權衡他們自己的持久化與性能問題。
關于Membase、Couchbase與Northscale的背景信息
Membase產品于2010年10月發布,是由Zynga、NorthScale與NHN聯合開發的。NorthScale后來變成了Membase Inc,接下來在去年與CouchOne Inc合并后又變成了Couchbase Inc。Membase被Zynga用來開發其流行的社交游戲,如Farmville、Mafia Wars與Cafe World。Membase針對Web應用數據的存儲(如Farmville的數據)進行了優化。這些在線社交游戲存儲了大量的數據。根據ReadWrite Cloud的Audrey Watters所述,“數據量令人難以置信。這是一種新的數據類型,需要開發一種新的數據庫管理系統(Membase)”。Zynga已經在使用Memcached,因此向Membase的轉換是個自然而然的過程。InfoQ曾采訪過來自Couchbase的工程師Dustin Sallings,他介紹了為支持Membase之類的產品對Memcached wire協議所做的改變。
在InfoQ此前發布的一篇新聞中,CouchDB的創建者及Couchbase的聯合創始人Damien Katz表示他將專注于Couchbase,因為這是一個很好的機會,可以重新實現CouchDB,拋棄無法滿足需求的、強化可用的功能,并將Membase的可伸縮性、速度、集群與緩存特性添加到合并后的Couchbase產品中。Damien對根據意見來決定的Apache項目的速度與進展表示遺憾,人們對于成功的商業產品需求的增長速度是飛快的。他對于合并之后的產品的職責是創造出一款能夠充分發揮兩者優勢的產品。在隨后的一篇博文中,Damien說Membase產品的速度很快且具有可伸縮性,但卻沒有報表與跨數據中心的復制功能。CouchDB產品具有更多的特性,如高級的復制與報表功能,但速度上卻不盡如人意,也無法應付高負載。這兩個產品的融合是成功的,Couchbase終將破繭而出。
譯者,張龍,熱衷于編程,樂于分享,對新技術有強烈的探索欲,對Java輕量級框架有一定研究。
【相關鏈接】
Couchbase Releases Couchbase Server 2.0 GA
Transitioning from RDBMS to NoSQL. Interview with Couchbase’s Dipti Borkar
it知識庫:Couchbase 與 Membase, CouchDB 的關系,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。