數據庫sharding

現在 Sharding 相關的軟件實現其實不少,基於數據庫層、DAO 層、不同語言下也都不乏案例。限於篇幅,作一下簡要的介紹。

MySQL Proxy + HSCALE

一套比較有潛力的方案。其中 MySQL Proxy (http://forge.mysql.com/wiki/MySQL_Proxy) 是用 Lua 腳本實現的,介於客戶端與服務器端之間,扮演 Proxy 的角色,提供查詢分析、失敗接管、查詢過濾、調整等功能。目前的 0.6 版本還做不到讀、寫分離。HSCALE 則是針對 MySQL Proxy 插件,也是用 Lua 實現的,對 Sharding 過程簡化了許多。需要指出的是,MySQL Proxy 與 HSCALE 各自會帶來一定的開銷,但這個開銷與集中式數據處理方式單條查詢的開銷還是要小的。


Hibernate Shards

這是 Google 技術團隊貢獻的項目(http://www.hibernate.org /414.html),該項目是在對 Google 財務系統數據 Sharding 過程中誕生的。因爲是在框架層實現的,所以有其獨特的特性:標準的 Hibernate 編程模型,會用 Hibernate 就能搞定,技術成本較低;相對彈性的 Sharding 策略以及支持虛擬 Shard 等。

Spock Proxy

這也是在實際需求中產生的一個開源項目。Spock(http://www.spock.com/)是一個人員查找的 Web 2.0 網站。通過對自己的單一 DB 進行有效 Sharding化 而產生了Spock Proxy(http://spockproxy.sourceforge.net/ ) 項目,Spock Proxy 算得上 MySQL Proxy 的一個分支,提供基於範圍的 Sharding 機制。Spock 是基於 Rails 的,所以Spock Proxy 也是基於 Rails 構建,關注 RoR 的朋友不應錯過這個項目。

HiveDB

上面介紹了 RoR 的實現,HiveDB (http://www.hivedb.org/)則是基於Java 的實現,另外,稍有不同的是,這個項目背後有商業公司支持。

PL/Proxy

前面幾個都是針對 MySQL 的 Sharding 方案,PL/Proxy 則是針對 PostgreSQL 的,設計思想類似 Teradata 的 Hash 機制,數據存儲對客戶端是透明的,客戶請求發送到 PL/Proxy 後,由這裏分佈式存儲過程調用,統一分發。 PL/Proxy 的設計初衷就是在這一層充當"數據總線"的職責,所以,當數據吞吐量支撐不住的時候,只需要增加更多的 PL/Proxy 服務器即可。大名鼎鼎的 Skype 用的就是 PL/Proxy 的解決方案。

Pyshards

http://code.google.com/p/pyshards/wiki/Pyshards 這是個基於 Python的解決方案。該工具的設計目標還有個 Re-balancing 在裏面,這倒是個比較激進的想法。目前只支持 MySQL 數據庫。
結束語

Sharding 是一項仍處於高速發展中的"老"技術,隨着 Web 2.0 的發展,Sahrding逐漸從比較"虛"的概念變成比較"實"的運用思路,開放源代碼軟件大潮也給 Sharding 注入新的活力,相信會有越來越多的項目採用 Sharding 技術,也會有更多成熟的 Sharding 方案和數據庫附加軟件涌現。

你的站點 Sharding 了麼?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章