百度、新浪、Mixi、Apache社區贊助的開源key-value分佈式存儲系統
[文章作者:張宴 本文版本:v1.0 最後修改:2009.01.21 轉載請注明原文鏈接:http://blog.s135.com/post/394.htm]
key-value分布式存儲系統查詢速度快、存放數據量大、支持高並發,非常適合通過主鍵進行查詢,但不能進行複雜的條件查詢。如果輔以Real- Time Search Engine(實時搜索引擎)進行複雜條件檢索、全文檢索,就可以替代並發性能較低的MySQL等關系型數據庫,達到高並發、高性能,節省幾十倍服務器數 量的目的。以MemcacheDB、Tokyo Tyrant為代表的key-value分布式存儲,在上萬並發連接下,輕松地完成高速查詢。而MySQL,在幾百個並發連接下,就基本上崩潰了。
雖然key-value分布式存儲具有極高的性能,但是只能做類似於MySQL的SELECT * FROM table WHERE id = 123;簡單主鍵查詢。
「搜索索引引擎+key-value分布式存儲」能夠實現高並發的複雜條件查詢、全文檢索與數據顯示。但是,由於索引更新需要時間,目前還不能實現完全 意義上的Real-Time Search(實時搜索),只能稱之為Near Real-Time Search(准實時搜索)。「搜索索引引擎+key-value分布式存儲」除了做全文檢索外,還可以在允許的索引延遲範圍內,取代MySQL進行複雜 條件查詢。
我的文章《億級數據的高並發通用搜索引擎架構設計》 的程序編碼已經完成,第一輪測試昨天已經結束,能夠在高並發情況下實現1分鍾內索引更新,屬於「Near Real-Time Search Engine(准實時搜索引擎)+key-value分布式存儲」應用。其中,索引引擎采用Sphinx,存儲采用key-value分布式數據庫Tokyo Tyrant。
以下是常見的key-value分布式存儲系統:
其中,以下幾款值得關注:
1、Hypertable:它是搜索引擎公司Zvents根據Google的9位研究人員在2006年發表的一篇論文《Bigtable:結構化數據的分布存儲系統》 開發的一款開源分布式數據儲存系統。Hypertable是按照1000節點比例設計,以 C++撰寫,可架在 HDFS 和 KFS 上。盡管還在初期階段,但已有不錯的效能:寫入 28M 列的資料,各節點寫入速率可達7MB/s,讀取速率可達 1M cells/s。Hypertable目前一直沒有太多高負載和大存儲的應用實例,但是最近,Hypertable項目得到了百度的贊助支持,相信其會有更好的發展。

2、Tokyo Tyrant:它是日本最大的SNS社交網站mixi.jp開 發的 Tokyo Cabinet key-value數據庫網絡接口。它擁有Memcached兼容協議,也可以通過HTTP協議進行數據交換。對任何原有Memcached客戶端來講, 可以將Tokyo Tyrant看成是一個Memcached,但是,它的數據是可以持久存儲的。Tokyo Tyrant 具有故障轉移、日志文件體積小、大數據量下表現出色等優勢,詳見:http://blog.s135.com/post/362.htm
Tokyo Cabinet 2009年1月18日發布的新版本(Version 1.4.0)已經實現 Table Database,將key-value數據庫又擴展了一步,有了MySQL等關系型數據庫的表和字段的概念,相信不久的將來,Tokyo Tyrant 也將支持這一功能。值得期待。

3、CouchDB: 它是Apache社區基於 Erlang/OTP 構建的高性能、分布式容錯非關系型數據庫系統(NRDBMS)。它充分利用 Erlang 本身所提供的高並發、分布式容錯基礎平台,並且參考 Lotus Notes 數據庫實現,采用簡單的文檔數據類型(document-oriented)。在其內部,文檔數據均以 JSON 格式存儲。對外,則通過基於 HTTP 的 REST 協議實現接口,可以用十幾種語言進行自由操作。

4、MemcacheDB:它是新浪互動社區事業部為在Memcached基礎上,增加Berkeley DB存儲層而開發一款支持高並發的分布式持久存儲系統,對任何原有Memcached客戶端來講,它仍舊是個Memcached,但是,它的數據是可以持久存儲的。
