熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL語言 >> 正文

開源數據庫Sharding技術[1]

2013-11-13 12:39:31  來源: SQL語言 

  從 Shard 到 Sharding

  Shard這個詞英文的意思是碎片而作為數據庫相關的技術用語似乎最早見於大型多人在線角色扮演游戲(MMORPG)中的Sharding 姑且稱之為分片

  Sharding 不是一門新技術而是一個相對簡樸的軟件理念如您所知MySQL 之後才有了數據表分區功能那麼在此之前很多 MySQL 的潛在用戶都對 MySQL 的擴展性有所顧慮而是否具備分區功能就成了衡量一個數據庫可擴展性與否的一個關鍵指標(當然不是唯一指標)數據庫擴展性是一個永恆的話題MySQL 的推廣者經常會被問到如在單一數據庫上處理應用數據捉襟見肘而需要進行分區化之類的處理是如何辦到的呢? 答案是Sharding

  Sharding 不是一個某個特定數據庫軟件附屬的功能而是在具體技術細節之上的抽象處理是水平擴展(Scale Out亦或橫向擴展向外擴展)的解決方案其主要目的是為突破單節點數據庫服務器的 I/O 能力限制解決數據庫擴展性問題

  事關數據庫擴展性

  說起數據庫擴展性這是個非常大的話題目前的商業數據都有自己的擴展性解決方案在過去相對來說比較成熟但是隨著互聯網的高速發展不可避免的會帶來一些計算模式上的演變這樣很多主流商業系統也難免暴露出一些不足之處比如 Oracle 的 RAC 是采用共享存儲機制對於 I/O 密集型的應用瓶頸很容易落在存儲上這樣的機制決定後續擴容只能是 Scale Up(向上擴展) 類型對於硬件成本開發人員的要求維護成本都相對比較高

  Sharding 基本上是針對開源數據庫的擴展性解決方案很少有聽說商業數據庫進行 Sharding 的目前業界的趨勢基本上是擁抱 Scale Out逐漸從 Scale Up 中解放出來

  Sharding 的應用場景

  任何技術都是在合適的場合下能發揮應有的作用 Sharding 也一樣聯機游戲IMBSP 都是比較適合 Sharding 的應用場景其共性是抽象出來的數據對象之間的關聯數據很小比如IM每個用戶如果抽象成一個數據對象完全可以獨立存儲在任何一個地方數據對象是 Share Nothing 的再比如 Blog 服務提供商的站點內容基本為用戶生成內容(UGC)完全可以把不同的用戶隔離到不同的存儲集合而對用戶來說是透明的

  這個 Share Nothing是從數據庫集群中借用的概念舉例來說有些類型的數據粒度之間就不是 Share Nothing比如類似交易記錄的歷史表信息如果一條記錄中既包含賣家信息與買家信息如果隨著時間推移賣家會分別與其他用戶繼續進行交易這樣不可避免的兩個買賣家的信息會分布到不同的 Sharding DB 上而這時如果針對買賣家查詢就會跨越更多的 Sharding 開銷就會比較大

  Sharding 並不是數據庫擴展方案的銀彈也有其不適合的場景比如處理事務型的應用就會非常復雜對於跨不同DB的事務很難保證完整性得不償失所以采用什麼樣的 Sharding 形式不是生搬硬套的

  Sharding與數據庫分區(Partition)的區別

  有的時候Sharding 也被近似等同於水平分區(Horizontal Partitioning)網上很多地方也用 水平分區來指代 Sharding但我個人認為二者之間實際上還是有區別的的確Sharding 的思想是從分區的思想而來但數據庫分區基本上是數據對象級別的處理比如表和索引的分區每個子數據集上能夠有不同的物理存儲屬性還是單個數據庫范圍內的操作而 Sharding 是能夠跨數據庫甚至跨越物理機器的

[]  []  


From:http://tw.wingwit.com/Article/program/SQL/201311/16326.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.