天天看點

百度、新浪、Mixi、Apache社群贊助的開源key-value分布式存儲系統[轉載]

[文章作者:張宴 本文版本:v1.0 最後修改:2009.01.21 轉載請注明原文連結:http://blog.s135.com/post/394/]

  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 也将支援這一功能。值得期待。

  [img]http://blog.s135.com/attachment/200901/tabledatabasecmp.png[/img]

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

  [img]http://blog.s135.com/attachment/200901/sketch.png[/img]

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

  [img]http://blog.s135.com/attachment/200801/memcachedb.jpg[/img]

<!---搜尋 -->

<style type="text/css">

@import url(http://www.google.com/cse/api/branding.css);

</style>

<div class="cse-branding-right" style="background-color:#000000;color:#FFFFFF">

<div class="cse-branding-form">

<form action="http://www.google.com/cse" id="cse-search-box">

<div>

<input type="hidden" name="cx" value="partner-pub-1594701811387501:ugi9stv3ucv" />

<input type="hidden" name="ie" value="GB2312" />

<input type="text" name="q" size="100" />

<input type="submit" name="sa" value="搜尋" />

</div>

</form>

</div>

<div class="cse-branding-logo">

<img src="http://www.google.com/images/poweredby_transparent/poweredby_000000.gif" alt="Google" />

</div>

<div class="cse-branding-text">

自定義搜尋

</div>

</div>