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

MySQL Sharding可擴展設計簡析

編輯:MySQL綜合教程

MySQL Sharding可擴展設計簡析   一.背景              我們知道,當數據庫中的數據量越來越大時,不論是讀還是寫,壓力都會變得越來越大。采用MySQL Replication多master多slave方案,在上層做負載均衡,雖然能夠一定程度上緩解壓力。但是當一張表中的數據變得非常龐大時,壓力還是非常大的。試想,如果一張表中的數據量達到了千萬甚至上億級別的時候,不管是建索引,優化緩存等,都會面臨巨大的性能壓力。 www.2cto.com     二.定義       數據sharding,也稱作數據切分,或分區。是指通過某種條件,把同一個數據庫中的數據分散到多個數據庫或多台機器上,以減小單台機器壓力。   三.分類       數據分區根據切分規則,可以分為兩類:
      (1)垂直分區:以表為單位,把不同的表分散到不同的數據庫或主機上。特點是規則簡單,實施方便,適合業務之間耦合度低的系統。     (2)水平分區:以行為單位,將同一個表中的數據按照某種條件拆分到不同的數據庫或主機上。特點是相對復雜,適合單表巨大的系統。         在實際情況中,有的時候把垂直分區和水平分區結合使用。   四.示意圖       下面通過幾張圖來給出上面三種分區方式的直觀效果。
      (1)垂直分區  www.2cto.com          

      (2)水平分區        

      (3)聯合分區       

  五.注意事項        下面我們所說的分區,主要是指水平分區。
      (1)在實施分區前,我們可以查看所安裝版本的mysql是否支持分區:
           mysql> show variables like "%partition%";
           如果支持則會顯示:          +-------------------+-------+          | Variable_name     | Value |          +-------------------+-------+          | have_partitioning | YES   |          +-------------------+-------+        (2)分區適用於一個表的所有數據和索引;不能只對數據分區而不對索引分區,反之亦然,同時也不能只對表的一部分進行分區。        (3)分區類型:
             RANGE  分區:基於屬於一個給定連續區間的列值,把多行分配給分區。            LIST  分區:類似於按RANGE分區,區別在於LIST分區是基於列值匹配一個離散值集合中的某個值來進行選擇。            HASH分區:基於用戶定義的表達式的返回值來進行選擇的分區,該表達式使用將要插入到表中的這些行的列值進行計算。            KEY  分區:類似於按HASH分區,區別在於KEY分區只支持計算一列或多列,且MySQL 服務器提供其自身的哈希函數。必須有一列或多列包含整數值。           無論使用何種類型的分區,分區總是在創建時就自動的順序編號,且從0開始記錄。當有一新行插入到一個分區表中時,就是使用這些分區編號來識別正確的分區。         (4) MySQL提供了許多修改分區表的方式。添加、刪除、重新定義、合並或拆分已經存在的分區是可能的。所有這些操作都可以通過使用ALTER TABLE 命令的分區擴展來實現.  www.2cto.com           (5) 可以對已經存在的表進行分區,直接使用alter table命令即可。   六.參考文獻:
  1.《MySQL性能調優與架構設計》 2.《MySQL 5.1參考手冊》     作者 pathenon

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