schema.xml介紹
schema.xml做爲Mycat中重要的配置⽂件之⼀,管理着Mycat的邏輯庫、表、分⽚規則、DataNode以及DataHost之間的映射關係。弄懂這些配置,是正確使⽤Mycat的前提。
schema 標籤⽤於定義MyCat實例中的邏輯庫
Table 標籤訂義了MyCat中的邏輯表
dataNode 標籤訂義了MyCat中的數據節點,也就是咱們一般說所的數據分⽚。
dataHost標籤在mycat邏輯庫中也是做爲最底層的標籤存在,直接定義了具體的數據庫實例、讀寫分離配置和⼼跳語句。node
schema.xml配置
mysql
server.xml介紹
server.xml⼏乎保存了全部mycat須要的系統配置信息。最常⽤的是在此配置⽤戶名、密碼及權限。~~~~算法
server.xml配置
sql
rule.xml⾥⾯就定義了咱們對錶進⾏拆分所涉及到的規則定義。咱們能夠靈活的對錶使⽤不一樣的分⽚算法,或者對錶使⽤相同的算法但具體的參數不一樣。這個⽂件⾥⾯主要有tableRule和function這兩個標籤。在具體使⽤過程當中能夠按照需求添加tableRule和function。
此配置⽂件能夠不⽤修改,使⽤默認便可。
tableRule 標籤配置說明:
name 屬性指定惟⼀的名字,⽤於標識不一樣的表規則
rule 標籤則指定對物理表中的哪⼀列進⾏拆分和使⽤什麼路由算法。
columns 內指定要拆分的列名字。
algorithm 使⽤ function 標籤中的 name 屬性。鏈接表規則和具體路由算法。固然,多個表規則能夠鏈接到同⼀個路由算法上。 table 標籤內使⽤。讓邏輯表使⽤這個規則進⾏分⽚。數據庫
function 標籤配置說明:
name 指定算法的名字。
class 制定路由算法具體的類名字。
property 爲具體算法須要⽤到的⼀些屬性。編程
連續分⽚
⼀、⽇期列分區法
配置說明:
tableRule標籤:數組
columns :標識將要分⽚的表字段 algorithm :指定分⽚函數
function標籤:併發
dateFormat :⽇期格式 sBeginDate :開始⽇期 sPartionDay :分區天數,即默認從開始⽇期算起,分隔10天⼀個分區
⼆、範圍約定
配置說明:
tableRule標籤:分佈式
columns :標識將要分⽚的表字段 algorithm :指定分⽚函數
function標籤:函數
mapFile :指定分⽚函數須要的配置⽂件名稱 autopartition-long.txt⽂件內容: 全部的節點配置都是從0開始,及0表明節點1,此配置⾮常簡單,即預先制定可能的id範圍對應某個分⽚
優點:擴容⽆需遷移數據
缺點:熱點數據,併發受限
離散分⽚
⼀、枚舉法
配置說明:
tableRule標籤:
columns :標識將要分⽚的表字段 algorithm :指定分⽚函數
function標籤:
mapFile :指定分⽚函數須要的配置⽂件名稱 type :默認值爲0,0表示Integer,⾮零表示String defaultNode :指定默認節點,⼩於0表示不設置默認節點,⼤於等於0表示設置默認節點,0表明節點1。 默認節點的做⽤:枚舉分⽚時,若是碰到不識別的枚舉值,就讓它路由到默認節點。 若是不配置默認節點(defaultNode值⼩於0表示不配置默認節點),碰到不識別的枚舉值就會報錯:
can't fifind datanode for sharding column:column_name val:ffffffffffffffff
partition-hash-int.txt 配置:
10000=0 列等於10000 放第⼀個分⽚
10010=1
男=0
⼥=1
beijing=0
tianjin=1
zhanghai=2
⼆、求模法
此種配置⾮常明確,即根據id與count(你的結點數)進⾏求模運算,相⽐⽅式1,此種在批量插⼊時須要切換數據源,id不連續
配置說明:
tableRule標籤:
columns :標識將要分⽚的表字段 algorithm :指定分⽚函數
function標籤:
count :節點數量
3、字符串拆分hash解析
配置說明:
tableRule標籤:
columns :標識將要分⽚的表字段 algorithm :指定分⽚函數
function標籤:
length :表明字符串hash求模基數 count :分區數 hashSlice : hash預算位,即根據⼦字符串 hash運算
"2" -> (0,2)
"1:2" -> (1,2
"1:" -> (1,0)
"-1:" -> (-1,0)
":-1" -> (0,-1)
":" -> (0,0)
4、固定分⽚hash算法
配置說明:
tableRule標籤:
columns :標識將要分⽚的表字段 algorithm :指定分⽚函數
function標籤:
partitionCount :指定分⽚個數列表 partitionLength : 分⽚範圍列表,分區⻓度:默認爲最⼤2^n=1024 ,即最⼤⽀持1024分區 約束 :
count,length 兩個數組的⻓度必須是⼀致的。 1024 = sum((count[i]*length[i]))
⽤法例⼦:
若是須要平均分配設置:平均分爲4分⽚,partitionCount*partitionLength=1024
5、⼀致性hash
⼀致性hash預算有效解決了分佈式數據的擴容問題,前1-9中id規則都多少存在數據擴容難題,⽽10規則解決了數據擴容難點
6、編程指定
配置說明:
tableRule標籤:
columns :標識將要分⽚的表字段 algorithm :指定分⽚函數
function標籤:
startIndex :字符串截取的起始索引位置 size :截取的位數 partitionCount :分區數量 defaultPartition :默認分區
11010419800101
此⽅法爲直接根據字符⼦串(必須是數字)計算分區號(由應⽤傳遞參數,顯式指定分區號)。
例如id=05-100000002
在此配置中表明根據id中從startIndex=0,開始,截取siz=2位數字即05,05就是獲取的分區,若是沒傳默認分配到defaultPartition
優勢:數據分佈均勻,併發能⼒強
缺點:移植性差、擴容性差
綜合分⽚
⼀、通配取模
配置說明:
tableRule標籤:
columns :標識將要分⽚的表字段 algorithm :指定分⽚函數
function標籤:
patternValue :求模基數 defaultNode :默認節點,若是不配置了默認,則默認是0即第⼀個結點 mapFile :配置⽂件路徑
partition-pattern.txt⽂件內容:
配置⽂件中, 1-32 即表明 id%256 後分布的範圍,若是在1-32則在分區1,其餘類推,若是id⾮數字數據,則會分配在defaultNode 默認節點
1-32=0
33-64=1
65-96=2
97-128=3
129-160=4
161-192=5
193-224=6
225-256=7
0-0=7
⼆、ASCII碼求模通配
配置說明:
tableRule標籤:
columns :標識將要分⽚的表字段 algorithm :指定分⽚函數
function標籤:
patternValue :求模基數 prefixLength :ASCII 截取的位數 mapFile :配置⽂件路徑
partition-pattern.txt⽂件內容:
配置⽂件中, 1-32 即表明 id%256 後分布的範圍,若是在1-32則在分區1,其餘類推
此種⽅式相似⽅式6,只不過採起的是將列中前prefifixLength位全部ASCII碼的和與patternValue 進⾏求模,即 sum%patternValue ,獲取的值在通配範圍內的,即分⽚數。
ASCII編碼:
48-57=0-9阿拉伯數字 6四、65-90=@、A-Z 97-122=a-z
1-4=0
5-8=1
9-12=2
13-16=3
17-20=4
21-24=5
25-28=6
29-32=7
0-0=7
測試分⽚
需求
把商品表分⽚存儲到三個數據節點上。
建立表
配置完畢後,從新啓動mycat。使⽤mysql客戶端鏈接mycat,建立表。
分⽚測試分⽚策略指定爲「auto-sharding-long」分⽚規則指定爲「mod-long」