1. 程式人生 > >mycat 分片

mycat 分片

ins ood 記錄 cor txt .com pri src parent

1 配置下面兩種ER分片,並結合日誌分析子表插入過程中的不同

(1).父表按照主鍵ID分片,子表的分片字段與主表ID關聯,配置為ER分片

(2).父表的分片字段為其他字段,子表的分片字段與主表ID關聯,配置為ER分片

答:(1)第一種分片:父表按照主鍵ID分片

表設計:父表student,子表selectcourse

student(id,stu_id);

selectcourse(id,stu_id,cou_id);

schema.xml中增加父表、子表定義:

<table name="student" primaryKey="ID" dataNode="dn1,dn2,dn3" rule="mod-long">

<childTable name="selectcourse" primaryKey="ID" joinKey="stu_id" parentKey="id" />

</table>

mysql客戶端中執行創建表的語句:

create table student(id bigint not null primary key,stu_id bigint not null);

create table selectcourse(id bigint not null primary key,stu_id bigint not null,cou_id bigint not null);

插入父表記錄

insert into student(id,stu_id) values(1,3001);//

insert into student(id,stu_id) values(2,3002);

插入子表記錄

insert into selectcourse(id,stu_id,cou_id) values(1,1,1); //同時觀察日誌

技術分享圖片

總結:直接使用父表的分片規則(id字段mod算法)來查找節點。

2)第二種分片:父表的分片字段為其他字段

表設計:父表book,子表sail

book(id,book_id);

sail(id,book_id,custo_id);

rule.xml中增加“

mod-long-book”分片方法:分片字段為book_id

<tableRule name="mod-long-book">

<rule>

<columns>book_id</columns>

<algorithm>mod-long</algorithm>

</rule>

</tableRule>

schema.xml中增加父表、子表定義:父表用"mod-long-book"方法分片,

<table name="book" primaryKey="ID" dataNode="dn1,dn2,dn3" rule="mod-long-book">

<childTable name="sail" primaryKey="ID" joinKey="book_id" parentKey="id" />

</table>

mysql客戶端中執行創建表的語句:

create table book(id bigint not null primary key,book_id bigint not null);

create table sail(id bigint not null primary key,book_id bigint not null,customer_id bigint not null);

插入父表記錄:

insert into book(id,book_id) values(1,3001);

insert into book(id,book_id) values(2,3002);

插入子表記錄

insert into sail(id,book_id,customer_id) values(1,2,2001);//同時觀察日誌

技術分享圖片

總結:先通過父表的id字段查詢分片,再往相應的分片中插入數據。

比第一種方法多了一個“查找分片”的步驟。

2 選則連續分片規則中的2種,對配置和路由過程做完整的分析

(1)自定義數字範圍分片分片方法為rang-long

首先,在rule.xml中配置分片方法“price-rang-long”,算法為“rang-long”;

技術分享圖片

再在schema.xml中配置表信息,包括表名、主鍵、節點、分片方法等;

技術分享圖片

然後,在客戶端執行創建表的命令(mygoods);

技術分享圖片

最後,往mygoods表中插入記錄;

技術分享圖片

日誌信息:

技術分享圖片

路由描述:

mygoods表依據rang-long算法進行分割,rang-long又依據autopartition-long.txt(如下圖所示)文件中的值進行分片(制定數據節點dh),本題中的price300

屬於0-500M的範圍,所以本記錄應該路由到第0個節點上(下標從0開始,第0個節點就是dn1)執行,正如上圖中所示。

技術分享圖片

(2)自然月分片分片方法為partbymonth

首先,在rule.xml中配置分片方法“sharding-by-month”,算法為“partbymonth”;

技術分享圖片

再在schema.xml中配置表信息,包括表名、主鍵、節點、分片方法等;

技術分享圖片

然後,在客戶端執行創建表的命令(myrecords);

技術分享圖片

最後,往myrecords表中插入記錄;

技術分享圖片

日誌信息:

技術分享圖片

路由描述:

Myrecords表依據partbymonth算法進行分割,partbymonth的以自然月為依據,每個月一個分片,從2015-01-01開始(如下圖所示:rule.xmlpartbymonth分片方法),

20151月份數據在第0節點,20152月份數據在第1節點,以此類推。本題中的create_time=2015-03-01對應的數據應該在第2個節點(下標從0開始,第2個節點

就是dn3)執行,所以,本記錄路由到第2個節點上(dn3)執行,正如上圖中所示。

技術分享圖片

3 選擇離散分片規則的2種,對配置和路由過程做完整的分析

(1)十進制求模分片:分片方法為mod-long

首先,在rule.xml中配置分片方法;

技術分享圖片

再在schema.xml中配置表信息,包括表名、主鍵、節點、分片方法等;

技術分享圖片

然後,在客戶端執行創建表的命令(student);

create table student(id bigint not null primary key,stu_id bigint not null);

最後,往student表中插入記錄;

技術分享圖片

日誌信息:

技術分享圖片

路由描述:

student表依據mod-log算法進行分割,本題中記錄值為43的模為1,對應的數據應該在第1個節點(下標從0開始,第1個節點就是dn2)上;所以,本記錄路由到第1個節點上(dn2)執行,正如上圖中所示。

(2)哈希分片:分片方法為hash-int

首先,在rule.xml中配置分片方法;

技術分享圖片

再在schema.xml中配置表信息,包括表名、主鍵、節點、分片方法等;

技術分享圖片

然後,在客戶端執行創建表的命令(employee);

create table employee (id int not null primary key,name varchar(100),sharding_id int not null);

最後,往myrecords表中插入記錄;

技術分享圖片

日誌信息:

技術分享圖片

路由描述:

employee 表依據sharding-by-intfile算法進行分割,sharding-by-intfile算法又依據partition-hash-int.txt文件(如下圖所示)中的範圍進行分片,本題中記錄值10010=1

對應的數據應該在第1個節點(下標從0開始,第1個節點就是dn2)上;所以,本記錄路由到第1個節點上(dn2)執行,正如上圖中所示。

技術分享圖片

技術分享圖片

mycat 分片