程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 淺談MySQL Sharding分片技術

淺談MySQL Sharding分片技術

編輯:MySQL綜合教程

淺談MySQL Sharding分片技術   一個生產系統總會經歷一個業務量由小變大的過程,可擴展性成為了考量系統高可用性的一個重要衡量指標。試想一下,一個記事本應用程序,在存儲的很少字節時,能夠快速的打開和訪問,但是如果硬要讓記事本存儲百萬、千萬字節,那麼這個記事本估計就歇菜了!同樣,系統剛開始的時候,用戶數量不多,所有的數據都放在了同一個數據庫中,此時因為用戶少壓力小,一個數據庫完全可以應付的了。但是隨著用戶數量不斷增加,數據庫壓力也與日俱增,如果沒有妥善的擴容機制,那麼再強勁的硬件和商業數據庫也會歇菜。    www.2cto.com   “Shard”字面意思為碎片,Sharding可以譯為分片。MySQL5以後提供了Sharding的能力,其目的就是為突破單節點數據服務器I/O能力限制,解決數據庫Scale Out水平擴展的問題。通過Sharding可以將數據按照物理位置貼合用戶分布,得到更加快速的響應;操作龐然大物總是讓人頭疼,Sharding將數據分塊,更小的數據集操作匯總能夠得到更加的體驗;分片使得數據分攤在各個數據節點,對其操作實現負載均衡,眾多屌絲的匯聚戰勝了一個高富帥!    ü  Sharding按方向可以分為兩類。垂直分區:以表為單位,把不同的表分散到不同的數據庫或主機上。特點是規則簡單,實施方便,適合業務之間耦合度低的系統。水平分區:以行為單位,將同一個表中的數據按照某種條件拆分到不同的數據庫或主機上。特點是相對復雜,適合單表巨大的系統。    www.2cto.com   ü  Sharding按模式可以分為兩大模式。靜態分片模式,即分區鍵是靜態分配的,一般使用范圍或哈希函數,例如深圳團隊放到一個分片,北京團隊放到另外一個分片;或者編號為0096開頭的員工放到一個分片,而0199開頭的員工放到另外一個分片。這種模式雖然實現簡單,但明顯的缺陷便是存在數據不均勻的情況。動態分片模式,即分區函數將從字典中查找分區鍵,然後定位具體哪個分片存儲了數據。這種模式比靜態模式更加靈活,但是需要一個集中存儲來存放字典,每次查找數據都需要執行2次查詢,並且集中存儲本身還可能存在單點故障。    ü  Sharding按分區類型分為:    1)        RANGE 分區:基於屬於一個給定連續區間的列值,把多行分配給分區。    2)        LIST 分區:類似於按RANGE分區,區別在於LIST分區是基於列值匹配一個離散值集合中的某個值來進行選擇。    3)        HASH分區:基於用戶定義的表達式的返回值來進行選擇的分區,該表達式使用將要插入到表中的這些行的列值進行計算。    4)        KEY 分區:類似於按HASH分區,區別在於KEY分區只支持計算一列或多列,且MySQL 服務器提供其自身的哈希函數。必須有一列或多列包含整數值。    在經過周密的設計和反復的測試後發現,所做的一切的努力都是值得的,MySQL的Sharding技術讓一群低廉的PC服務器構成了一個可以媲美昂貴的小型機+商業數據庫的性能,以低成本的方式構建了強大的數據中心。難怪淘寶這個巨人在很早的時候就一直推行“走你IOE”!    因此,學習MySQL Sharding百益而無一害!最早的先驅者估計可以是Google捐贈給開源社區的Hibernate shards了,這是一個Hibernate應用橫向分割的分布式數據庫解決方案的框架。它可以讓一個Hibernate應用比較簡單地加入橫向分割的數據庫分布式功能。另外,還有HiveDB。其底層也是基於Hibernate shards實現,目前版本相對穩定,其亮點是具有類似mysql proxy之類多服務器容錯功能,單獨服務器發生故障不影響系統正常運行,通過類似ha-jdbc思想實現。最後,不得不提的就是淘寶貢獻的TDDL,使用過淘寶的同學應該都深有體會,其可靠性、可用性、穩定性、可擴展性均領跑業界很多同類產品。TDDL最大的兩個亮點是動態數據源管理和分庫分表。建議抽出游戲時間,向淘寶好好學習,天天向上!   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved