日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Mycat分库路由规则

發(fā)布時(shí)間:2025/3/15 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mycat分库路由规则 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Mycat分庫(kù)路由分為連續(xù)路由和離散路由。

1、連續(xù)路由:

(1)、常用的路由方式:auto-sharding-long、sharding-by-date、sharding-by-month

(2)、優(yōu)點(diǎn):擴(kuò)容無(wú)需遷移數(shù)據(jù);范圍條件查詢消耗資源少。

(3)、缺點(diǎn):存在數(shù)據(jù)熱點(diǎn)的可能性;并發(fā)訪問(wèn)能力受限于單一或少量的DataNode

2、離線路由:

(1)、常用的路由方式:sharding-by-intfile、sharding-by-murmur、mod-long(取模)、crc32slot(取模)

(2)、優(yōu)點(diǎn):并發(fā)訪問(wèn)能力增強(qiáng)。

(3)、缺點(diǎn):數(shù)據(jù)擴(kuò)容比較困難,涉及到數(shù)據(jù)遷移問(wèn)題;數(shù)據(jù)庫(kù)鏈接消耗資源多。


二、auto-sharding-long:

1、路由規(guī)則:

<tableRule name="auto-sharding-long-userid">

? ? ? <rule>

? ? ? ? ? ? ?<columns>userid</columns>

? ? ? ? ? ? ?<algorithm>rang-long-userid</algorithm>

? ? ? </rule>

</tableRule>

?

<function name="rang-long-userid"

??????? class="io.mycat.route.function.AutoPartitionByLong">

??????? <property name="mapFile">autopartition-long-userid.txt</property>

</function>

[root@host01 conf]# more autopartition-long-userid.txt

# range start-end ,data node index

# K=1000,M=10000.

0-1000=0

1001-2000=1

2001-3000=2

3001-4000=3

4001-5000=4

5001-6000=5

2、例子:

CREATE TABLE tb_user_detail_t (

? userid bigint not null primary key,

? name varchar(64) DEFAULT NULL,

? createtime datetime DEFAULT CURRENT_TIMESTAMP,

? moditytime datetime DEFAULT CURRENT_TIMESTAMP

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

?

寫入數(shù)據(jù)

insert into tb_user_detail_t(userid,name) values(999,'name999');

insert into tb_user_detail_t(userid,name) values(1999,'name999');

insert into tb_user_detail_t(userid,name) values(2999,'name999');

insert into tb_user_detail_t(userid,name) values(3999,'name999');

insert into tb_user_detail_t(userid,name) values(4999,'name999');

insert into tb_user_detail_t(userid,name) values(5999,'name999');

、sharding-by-date:

1、路由規(guī)則:

<tableRule name="sharding-by-date-test">

<rule>

?????? <columns>createtime</columns>

?????? <algorithm> partbydate </algorithm>

</rule>

</tableRule>

<function name=" partbydate" class="io.mycat.route.function.PartitionByDate">

??? <property name="dateFormat"> yyyy-MM-dd HH:mm:ss </property>

??? <property name="sBeginDate">2016-01-01 00:00:00</property>

?? ?<property name="sPartionDay">2</property>

</function>

分片日期從2016-01-01開(kāi)始,每2天一個(gè)分片。

2、例子:

CREATE TABLE `tb_user_partbydate` (

? `id` varchar(32) NOT NULL,

? `name` varchar(64) DEFAULT NULL,

? `createtime` varchar(10)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

?

insert into tb_user_partbydate (id,name,createtime) values('a0001','name1','2016-01-01 00:01:00');
insert into tb_user_partbydate (id,name,createtime) values('a0002','name1','2016-01-02 00:01:00');
insert into tb_user_partbydate (id,name,createtime) values('a0003','name1','2016-01-03 00:01:00');
insert into tb_user_partbydate (id,name,createtime) values('a0004','name1','2016-01-04 00:01:00');
insert into tb_user_partbydate (id,name,createtime) values('a0005','name1','2016-01-05 00:01:00');
insert into tb_user_partbydate (id,name,createtime) values('a0006','name1','2016-01-06 00:01:00');
insert into tb_user_partbydate (id,name,createtime) values('a0007','name1','2016-01-07 00:01:00');
insert into tb_user_partbydate (id,name,createtime) values('a0005','name1','2016-01-08 00:01:00');
insert into tb_user_partbydate (id,name,createtime) values('a0006','name1','2016-01-09 00:01:00');
insert into tb_user_partbydate (id,name,createtime) values('a0007','name1','2016-01-10 00:01:00');

、sharding-by-month:

1、路由規(guī)則:

<tableRule name="sharding-by-month">

??????? <rule>

??????????????? <columns>createtime</columns>

??????????????? <algorithm>partbymonth</algorithm>

??????? </rule>

</tableRule>

<function name="partbymonth"

??????? class="io.mycat.route.function.PartitionByMonth">

??????? <property name="dateFormat">yyyy-MM-dd HH:mm:ss</property>

??????? <property name="sBeginDate">2015-01-01 00:00:00</property>

</function>

dateFormat為日期格式,sBeginDate為開(kāi)始日期。

2、例子:

CREATE TABLE ` tb_partbymonth ` (

? `id` varchar(32) NOT NULL,

? `name` varchar(64) DEFAULT NULL,

? `createtime` datetime DEFAULT CURRENT_TIMESTAMP

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

?

寫入數(shù)據(jù)(注意這里不能使用now函數(shù))

insert into tb_partbymonth(id,name,createtime) values('a0001','name1','2015-01-01 10:00:00');

insert into tb_partbymonth(id,name,createtime) values('a0002','name1','2015-02-02 10:00:00');

insert into tb_partbymonth(id,name,createtime) values('a0003','name1','2015-03-01 00:00:00');

insert into tb_partbymonth(id,name,createtime) values('a0004','name1','2015-04-01 00:00:00');

insert into tb_partbymonth(id,name,createtime) values('a0005','name1','2015-05-01 10:00:00');

insert into tb_partbymonth(id,name,createtime) values('a0006','name1','2015-06-02 10:00:00');

insert into tb_partbymonth(id,name,createtime) values('a0007','name1','2015-07-01 00:00:00');

insert into tb_partbymonth(id,name,createtime) values('a0008','name1','2015-08-01 00:00:00');

insert into tb_partbymonth(id,name,createtime) values('a0009','name1','2015-09-01 10:00:00');

insert into tb_partbymonth(id,name,createtime) values('a0010','name1','2015-10-02 10:00:00');

insert into tb_partbymonth(id,name,createtime) values('a0011','name1','2015-11-01 00:00:00');

insert into tb_partbymonth(id,name,createtime) values('a0012','name1','2015-12-01 00:00:00');

insert into tb_partbymonth(id,name,createtime) values('a0013','name1','2016-01-01 00:00:00');

五、sharding-by-intfile(枚舉):

1、路由規(guī)則:

<tableRule name="sharding-by-intfile-provcode">

??????? <rule>

??????????????? <columns>provcode</columns>

??????????????? <algorithm>hash-int-provcode</algorithm>

??????? </rule>

</tableRule>

?

<function name="hash-int-provcode"

??????? class="io.mycat.route.function.PartitionByFileMap">

??????? <property name="mapFile">partition-hash-int-provcode.txt</property>

??????? <property name="type">0</property>

</function>

type=0 代表×××

type=1 代表字符串類型

[root@host01 conf]# more partition-hash-int-provcode.txt

1=0

2=1

3=2

4=3

5=4

6=5

7=0

8=1

9=2

10=3

11=4

12=5

DEFAULT_NODE=0 ##找不到省份匹配的情況下,默認(rèn)放到數(shù)據(jù)庫(kù)1

這里是6個(gè)庫(kù),序號(hào)0-5,將不同的省份映射到對(duì)應(yīng)的庫(kù)。所有的省份和庫(kù)哦對(duì)應(yīng)關(guān)系都要枚舉出來(lái)。

2、例子:

CREATE TABLE `tb_user_t` (

? id bigint auto_increment not null primary key,

? `name` varchar(64) DEFAULT NULL,

?? provcode int ,

? `createtime` datetime DEFAULT CURRENT_TIMESTAMP,

? `moditytime` datetime DEFAULT CURRENT_TIMESTAMP

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

發(fā)現(xiàn)分庫(kù)情況下定義自動(dòng)增長(zhǎng)的id不管用,因?yàn)槊總€(gè)庫(kù)都有自己的自增長(zhǎng)id,通過(guò)mycat查詢的話會(huì)有重復(fù)的id.

如下:

mysql> select * from tb_user_t order by id;

+----+----------+----------+---------------------+---------------------+

| id | name???? | provcode | createtime????????? | moditytime????????? |

+----+----------+----------+---------------------+---------------------+

|? 1 | name0005 |??????? 5 | 2017-08-09 10:54:44 | 2017-08-09 10:54:44 |

|? 1 | name0001 |??????? 1 | 2017-08-09 10:54:44 | 2017-08-09 10:54:44 |

|? 1 | name0004 |??????? 4 | 2017-08-09 10:54:44 | 2017-08-09 10:54:44 |

|? 1 | name0002 |??????? 2 | 2017-08-09 10:54:44 | 2017-08-09 10:54:44 |

|? 1 | name0003 |??????? 3 | 2017-08-09 10:54:44 | 2017-08-09 10:54:44 |

|? 1 | name0006 |??????? 6 | 2017-08-09 10:54:44 | 2017-08-09 10:54:44 |

|? 2 | name0011 |?????? 11 | 2017-08-09 10:54:53 | 2017-08-09 10:54:53 |

|? 2 | name0007 |??????? 7 | 2017-08-09 10:54:53 | 2017-08-09 10:54:53 |

|? 2 | name0010 |?????? 10 | 2017-08-09 10:54:53 | 2017-08-09 10:54:53 |

|? 2 | name0008 |??????? 8 | 2017-08-09 10:54:53 | 2017-08-09 10:54:53 |

|? 2 | name0009 |??????? 9 | 2017-08-09 10:54:53 | 2017-08-09 10:54:53 |

|? 2 | name0012 |?????? 12 | 2017-08-09 10:54:53 | 2017-08-09 10:54:53 |

|? 3 | name0013 |?????? 13 | 2017-08-09 11:12:17 | 2017-08-09 11:12:17 |

+----+----------+----------+---------------------+---------------------+

、sharding-by-murmur:

murmur算法是將字段進(jìn)行hash后分發(fā)到不同的數(shù)據(jù)庫(kù),字段類型支持int和varchar.

1、路由規(guī)則:

<tableRule name="sharding-by-murmur-userid">

??????? <rule>

??????????????? <columns>userid</columns>

??????????????? <algorithm>murmur</algorithm>

??????? </rule>

</tableRule>

?

<function name="murmur"

class="io.mycat.route.function.PartitionByMurmurHash">

<property name="seed">0</property><!-- 默認(rèn)是0 -->

<property name="count">6</property><!-- 要分片的數(shù)據(jù)庫(kù)節(jié)點(diǎn)數(shù)量,必須指定,否則沒(méi)法分片 -->

<property name="virtualBucketTimes">160</property><!-- 一個(gè)實(shí)際的數(shù)據(jù)庫(kù)節(jié)點(diǎn)被映射為這么多虛擬節(jié)點(diǎn),默認(rèn)是160倍,也就是虛擬節(jié)點(diǎn)數(shù)是物理節(jié)點(diǎn)數(shù)的160倍 -->

<!-- <property name="weightMapFile">weightMapFile</property> 節(jié)點(diǎn)的權(quán)重,沒(méi)有指定權(quán)重的節(jié)點(diǎn)默認(rèn)是1。以properties文件

的格式填寫,以從0開(kāi)始到count-1的整數(shù)值也就是節(jié)點(diǎn)索引為key,以節(jié)點(diǎn)權(quán)重值為值。所有權(quán)重值必須是正整數(shù),否則以1代替 -->

<!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property>

用于測(cè)試時(shí)觀察各物理節(jié)點(diǎn)與虛擬節(jié)點(diǎn)的分布情況,如果指定了這個(gè)屬性,會(huì)把虛擬節(jié)點(diǎn)的murmur hash值與物理節(jié)點(diǎn)的映

射按行輸出到這個(gè)文件,沒(méi)有默認(rèn)值,如果不指定,就不會(huì)輸出任何東西 -->

</function>

2、例子:

CREATE TABLE `tb_user_murmur_string_t` (

? `userid` varchar(32) NOT NULL,

? `name` varchar(64) DEFAULT NULL,

? `createtime` datetime DEFAULT CURRENT_TIMESTAMP,

? `moditytime` datetime DEFAULT CURRENT_TIMESTAMP,

? PRIMARY KEY (`userid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

?

?

寫入數(shù)據(jù)

insert into tb_user_murmur_string_t(userid,name) values('user002','name002');

insert into tb_user_murmur_string_t(userid,name) values('user003','name003');

insert into tb_user_murmur_string_t(userid,name) values('user004','name004');

insert into tb_user_murmur_string_t(userid,name) values('user005','name005');

insert into tb_user_murmur_string_t(userid,name) values('user006','name006');

insert into tb_user_murmur_string_t(userid,name) values('user007','name007');

insert into tb_user_murmur_string_t(userid,name) values('user008','name008');

insert into tb_user_murmur_string_t(userid,name) values('user009','name009');

insert into tb_user_murmur_string_t(userid,name) values('user010','name010');

、crc32slot:

crs32算法,分庫(kù)字段類型支撐int和varchar.

1、路由規(guī)則:

<tableRule name="crc32slot">

? ? ? ?<rule>

? ? ? ? ? ?<columns>id</columns>

? ? ? ? ? ?<algorithm>crc32slot</algorithm>

? ? ? ?</rule>

?</tableRule>

?<function name="crc32slot"?class="io.mycat.route.function.PartitionByCRC32PreSlot">

? ? ? ? <property name="count">6</property><!-- 要分片的數(shù)據(jù)庫(kù)節(jié)點(diǎn)數(shù)量,必須指定,否則沒(méi)法分片 -->

?</function>

count=6指定需要分庫(kù)的個(gè)數(shù).

2、例子:

CREATE TABLE `tb_user_crc32slot_t` (

? `id` varchar(32) NOT NULL,

? `name` varchar(64) DEFAULT NULL,

? `createtime` datetime DEFAULT CURRENT_TIMESTAMP,

? `moditytime` datetime DEFAULT CURRENT_TIMESTAMP

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

?

寫入數(shù)據(jù):

insert into tb_user_crc32slot_t(id,name) values('a0002','name1');

insert into tb_user_crc32slot_t(id,name) values('a0003','name1');

insert into tb_user_crc32slot_t(id,name) values('a0004','name1');

insert into tb_user_crc32slot_t(id,name) values('a0005','name1');

insert into tb_user_crc32slot_t(id,name) values('a0006','name1');

insert into tb_user_crc32slot_t(id,name) values('a0007','name1');

insert into tb_user_crc32slot_t(id,name) values('a0008','name1');

insert into tb_user_crc32slot_t(id,name) values('a0009','name1');

insert into tb_user_crc32slot_t(id,name) values('a0010','name1');

insert into tb_user_crc32slot_t(id,name) values('a0011','name1');

insert into tb_user_crc32slot_t(id,name) values('a0012','name1');

insert into tb_user_crc32slot_t(id,name) values('a0013','name1');

insert into tb_user_crc32slot_t(id,name) values('a0014','name1');

insert into tb_user_crc32slot_t(id,name) values('a0015','name1');


、mod-long:

1、路由規(guī)則:對(duì)十進(jìn)制數(shù)進(jìn)行按照節(jié)點(diǎn)取模。

<tableRule name="mod-long">

? ? ? ?<rule>

? ? ? ? ? ?<columns>id</columns>

? ? ? ? ? ?<algorithm>mod-long</algorithm>

? ? ? ?</rule>

?</tableRule>

?<function name="mod-long"?class="io.mycat.route.function.PartitionByMod">

? ? ? ? <property name="count">3</property>

? ? ? ? ?<!--?要分片的數(shù)據(jù)庫(kù)節(jié)點(diǎn)數(shù)量,必須指定,否則沒(méi)法分片,即對(duì)十進(jìn)制數(shù)進(jìn)行按照節(jié)點(diǎn)取模,將數(shù)據(jù)離散的分散到各個(gè)數(shù)據(jù)節(jié)點(diǎn)上 -->

?</function>



九、mycat分庫(kù)規(guī)則E/R規(guī)則 :


1、路由規(guī)則:

E/R規(guī)則通過(guò)childTable設(shè)定之后,父子表相同的Id會(huì)落在相同的庫(kù),這樣的避免關(guān)聯(lián)的時(shí)候跨庫(kù)進(jìn)行關(guān)聯(lián).

joinKey="order_id" 是子表的order_id字段

parentKey="id" ? ? 是父表的id字段

即子表通過(guò)order_id字段跟父表的id字段進(jìn)行關(guān)聯(lián)

2、例子

(2.1)、創(chuàng)建表語(yǔ)句:

create table orders

(

? id int not null,

? order_name varchar(64),

? createtime datetime DEFAULT CURRENT_TIMESTAMP,

? moditytime datetime DEFAULT CURRENT_TIMESTAMP,

? PRIMARY KEY (id)

);



create table orders_cargo

(

? order_id int not null,

? cargo_name varchar(64),

? createtime datetime DEFAULT CURRENT_TIMESTAMP,

? moditytime datetime DEFAULT CURRENT_TIMESTAMP,

? PRIMARY KEY (order_id) ?

);

(2.2)、客戶Custermer和訂單Order

????每個(gè)客戶和每個(gè)客戶的訂單最好在同一個(gè)庫(kù)中。

????

3、如果把父表最為全局表也能解決join的效率問(wèn)題。

轉(zhuǎn)載于:https://blog.51cto.com/8757576/2054714

總結(jié)

以上是生活随笔為你收集整理的Mycat分库路由规则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品国产一区二区三区四区 | 国产码视频 | 成人免费大全 | 欧美美女一区二区三区 | 精品欧美乱码久久久久久 | 人人艹在线 | 国产精品久久网站 | 麻豆视频免费入口 | 国产黄色免费 | 亚洲AV无码乱码国产精品色欲 | 精品一区二区免费看 | 天天操天天干视频 | 黄色av播放 | av手机观看 | 日本欧美一本 | 97一区二区三区 | 男女激情网 | 久久人人看 | 宅男视频污| 国产一区二区中文字幕 | 桃色一区二区三区 | 婷婷狠狠爱 | 欧日韩在线 | 天天综合国产 | 欧美极品三级 | 国产农村妇女精品一区二区 | 久久午夜鲁丝片 | 北岛玲在线 | 在线视频黄 | 免费中文字幕视频 | 国产精品一区二区三区在线看 | av在线黄色| 欧美一级在线观看 | 男女在线观看视频 | 欧美一级淫片免费视频黄 | 海角社区id | 午夜男人影院 | 欧美日韩亚洲精品一区二区 | 4438亚洲| 老鸭窝av在线| 久久精品毛片 | 日本jizzjizz | 免费国产黄色 | 伊人午夜| zoo性欧美 | 亚洲30p | 精品影视一区二区 | 男女靠逼视频 | 欧美专区第一页 | 人人草超碰 | 日韩一级欧美一级 | 天天欲色 | 特级毛片在线观看 | 最新地址av | 色婷婷国产精品视频 | 欧美在线观看视频一区 | 91美女视频 | 伊人黄色片| 成人黄色av网站 | 九九热视频在线免费观看 | 久热久操 | 丁香色综合 | 日韩精品极品视频免费观看 | 欧美性生活网 | 成人在线免费小视频 | 国产91熟女高潮一区二区 | 96日本xxxxxⅹxxx70 | 亚洲一区二区在线看 | 福利在线视频导航 | 妖精视频在线观看 | 久久精品99国产 | 亚洲国产小视频 | 久久久久久久麻豆 | 久久久久久97| www香蕉| 成人精品在线观看视频 | 一级片在线观看视频 | 九九热色| 国产免费一区二区三区免费视频 | 成人v精品蜜桃久一区 | 在线免费看黄网站 | 亚洲国产精品久久久久久 | 性欧美18一19内谢 | 夜夜操天天 | xxxx69视频| 91免费看 | 精品人妻一区二区三区四区不卡 | 色5566| 国产欧美一区二区三区鸳鸯浴 | 河北彩花69xx精品一区 | 天天看黄色 | 9久久9毛片又大又硬又粗 | 涩涩在线看 | 黄色一级黄色片 | 国内一区二区视频 | 天堂在线观看av | 成人三级图片 | 亚洲一区中文字幕 | 国产一区二区网 |