<body><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/platform.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar/6154817622702903944?origin\x3dhttp://vincent1303.blogspot.com', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe" }); } }); </script>

百度、新浪、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,但是,它的數據是可以持久存儲的。

  點擊在新窗口中瀏覽此圖片

“ 百度、新浪、Mixi、Apache社區贊助的開源key-value分佈式存儲系統 ”