Mycat分⽚

配置schema.xml

schema.xml介紹
schema.xml做爲Mycat中重要的配置⽂件之⼀,管理着Mycat的邏輯庫、表、分⽚規則、DataNode以及DataHost之間的映射關係。弄懂這些配置,是正確使⽤Mycat的前提。
schema 標籤⽤於定義MyCat實例中的邏輯庫
Table 標籤訂義了MyCat中的邏輯表
dataNode 標籤訂義了MyCat中的數據節點,也就是咱們一般說所的數據分⽚。
dataHost標籤在mycat邏輯庫中也是做爲最底層的標籤存在,直接定義了具體的數據庫實例、讀寫分離配置和⼼跳語句。node

schema.xml配置
image.png
image.pngmysql

配置Server.xml

server.xml介紹
server.xml⼏乎保存了全部mycat須要的系統配置信息。最常⽤的是在此配置⽤戶名、密碼及權限。~~~~算法

server.xml配置
image.pngsql

配置rule.xml

rule.xml⾥⾯就定義了咱們對錶進⾏拆分所涉及到的規則定義。咱們能夠靈活的對錶使⽤不一樣的分⽚算法,或者對錶使⽤相同的算法但具體的參數不一樣。這個⽂件⾥⾯主要有tableRule和function這兩個標籤。在具體使⽤過程當中能夠按照需求添加tableRule和function。
此配置⽂件能夠不⽤修改,使⽤默認便可。
image.png
tableRule 標籤配置說明:
name 屬性指定惟⼀的名字,⽤於標識不一樣的表規則
rule 標籤則指定對物理表中的哪⼀列進⾏拆分和使⽤什麼路由算法。
columns 內指定要拆分的列名字。
algorithm 使⽤ function 標籤中的 name 屬性。鏈接表規則和具體路由算法。固然,多個表規則能夠鏈接到同⼀個路由算法上。 table 標籤內使⽤。讓邏輯表使⽤這個規則進⾏分⽚。數據庫

function 標籤配置說明:
name 指定算法的名字。
class 制定路由算法具體的類名字。
property 爲具體算法須要⽤到的⼀些屬性。編程

⼗個常⽤的分⽚規則

連續分⽚
⼀、⽇期列分區法
image.png
image.png
image.png
配置說明:
tableRule標籤:數組

columns :標識將要分⽚的表字段
algorithm :指定分⽚函數

function標籤:併發

dateFormat :⽇期格式
sBeginDate :開始⽇期
sPartionDay :分區天數,即默認從開始⽇期算起,分隔10天⼀個分區

⼆、範圍約定
image.png
配置說明:
tableRule標籤:分佈式

columns :標識將要分⽚的表字段
algorithm :指定分⽚函數

function標籤:函數

mapFile :指定分⽚函數須要的配置⽂件名稱
autopartition-long.txt⽂件內容:
全部的節點配置都是從0開始,及0表明節點1,此配置⾮常簡單,即預先制定可能的id範圍對應某個分⽚

image.png
優點:擴容⽆需遷移數據
缺點:熱點數據,併發受限

離散分⽚
⼀、枚舉法
image.png
配置說明:
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不連續
image.png
配置說明:
tableRule標籤:

columns :標識將要分⽚的表字段
algorithm :指定分⽚函數

function標籤:

count :節點數量

3、字符串拆分hash解析
image.png
配置說明:
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)
image.png
image.png

4、固定分⽚hash算法
image.png
配置說明:
tableRule標籤:

columns :標識將要分⽚的表字段
algorithm :指定分⽚函數

function標籤:

partitionCount :指定分⽚個數列表
partitionLength : 分⽚範圍列表,分區⻓度:默認爲最⼤2^n=1024 ,即最⼤⽀持1024分區
約束 :

count,length 兩個數組的⻓度必須是⼀致的。 1024 = sum((count[i]*length[i]))
⽤法例⼦:
image.png
若是須要平均分配設置:平均分爲4分⽚,partitionCount*partitionLength=1024
image.png

5、⼀致性hash
image.png
image.png
image.png
⼀致性hash預算有效解決了分佈式數據的擴容問題,前1-9中id規則都多少存在數據擴容難題,⽽10規則解決了數據擴容難點

6、編程指定
image.png
配置說明:
tableRule標籤:

columns :標識將要分⽚的表字段
algorithm :指定分⽚函數

function標籤:

startIndex :字符串截取的起始索引位置
size :截取的位數
partitionCount :分區數量
defaultPartition :默認分區

11010419800101
此⽅法爲直接根據字符⼦串(必須是數字)計算分區號(由應⽤傳遞參數,顯式指定分區號)。
例如id=05-100000002
在此配置中表明根據id中從startIndex=0,開始,截取siz=2位數字即05,05就是獲取的分區,若是沒傳默認分配到defaultPartition
優勢:數據分佈均勻,併發能⼒強
缺點:移植性差、擴容性差

綜合分⽚
⼀、通配取模
image.png
配置說明:
tableRule標籤:

columns :標識將要分⽚的表字段
algorithm :指定分⽚函數

function標籤:

patternValue :求模基數
defaultNode :默認節點,若是不配置了默認,則默認是0即第⼀個結點
mapFile :配置⽂件路徑

partition-pattern.txt⽂件內容:
配置⽂件中, 1-32 即表明 id%256 後分布的範圍,若是在1-32則在分區1,其餘類推,若是id⾮數字數據,則會分配在defaultNode 默認節點

id partition range start-end ,data node index

first host configuration

1-32=0
33-64=1
65-96=2
97-128=3

second host configuration

129-160=4
161-192=5
193-224=6
225-256=7
0-0=7

⼆、ASCII碼求模通配
image.png
配置說明:
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

range start-end ,data node index

ASCII

48-57=0-9

6四、65-90=@、A-Z

97-122=a-z

first host configuration

1-4=0
5-8=1
9-12=2
13-16=3

second host configuration

17-20=4
21-24=5
25-28=6
29-32=7
0-0=7

測試分⽚
需求
把商品表分⽚存儲到三個數據節點上。
image.png
建立表
配置完畢後,從新啓動mycat。使⽤mysql客戶端鏈接mycat,建立表。
image.png分⽚測試分⽚策略指定爲「auto-sharding-long」分⽚規則指定爲「mod-long」

相關文章
相關標籤/搜索