更新時(shí)間:2021-07-07 16:54:40 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2173次
怎么通過mycat實(shí)現(xiàn)分庫分表的功能:
準(zhǔn)備數(shù)據(jù)庫:
CREATE DATABASE db1 DEFAULT CHARACTER SET utf8;
CREATE DATABASE db2 DEFAULT CHARACTER SET utf8;
use db1;
CREATE TABLE product(
id INT PRIMARY KEY,
pname CHAR(20)
);
use db2;
CREATE TABLE product(
id INT PRIMARY KEY,
pname CHAR(20)
);
-------------------131-----------------
CREATE DATABASE db3 DEFAULT CHARACTER SET utf8;
use db3;
CREATE TABLE product(
id INT PRIMARY KEY,
pname CHAR(20)
);
如果想要修改mycat登錄的賬號(hào)密碼,可以到conf/server.xml去修改
重新啟動(dòng)的命令,切換到bin下執(zhí)行./mycat restart測(cè)試新的賬號(hào)密碼
修改mycat的conf/schema.xml文件,配置數(shù)據(jù)庫的url、賬號(hào)、密碼
配置數(shù)據(jù)參數(shù)
連接數(shù)據(jù)庫的過程:根據(jù)
中dataNode,得到節(jié)點(diǎn)的名字,例如dn1,然后再用dn1到所有的配置找是否有名字相同的,如果有則讀取到dataHost中指定的數(shù)據(jù)庫的配置,然后根據(jù)中配置url、用戶名、密碼連接到指定的數(shù)據(jù)庫,具體用哪個(gè)數(shù)據(jù)主要使用根據(jù)中的database決定,現(xiàn)在db1
重啟mycat
cd到bin執(zhí)行./mycat restart
通過Navicat操作mycat,雙擊mycat連接mycat,然后雙擊TESTDB選擇數(shù)據(jù)庫,如果雙擊TESTDB一直轉(zhuǎn)圈,那就是schema.xml文件配置有問題,檢查一下配置執(zhí)行./mycat restart
在product虛擬表中創(chuàng)建查詢,執(zhí)行插入數(shù)據(jù)的操作,此處有坑:通過mycat插入數(shù)據(jù)時(shí),必須將所有的字段名寫出來,如果不寫執(zhí)行失敗
結(jié)果如下:
insert into product(id,pname)values(1,‘電腦’);db1
insert into product(id,pname)values(5000000,‘手機(jī)’);db1
insert into product(id,pname)values(5000001,‘空調(diào)’);db2
insert into product(id,pname)values(10000000,‘鐵鍋’);db2
insert into product(id,pname)values(10000001,‘筆記本’);db3
結(jié)論:
目前根據(jù)默認(rèn)配置來說,切片的規(guī)則是根據(jù)id的范圍進(jìn)行切分,id范圍[1,500W]存在db1的product表中,[5000001,1000W]存在db2的product表中,[10000001,1500W]存在db3的product中…
mycat中的一些分片規(guī)則(水平拆分表的規(guī)則)•在schema.xml中指定了當(dāng)前默認(rèn)的分片規(guī)則
在conf/rule.xml文件中定義一些mycat支持的規(guī)則,在里面可以看到分片的詳細(xì)規(guī)則
在conf/autopartition-long.txt里面設(shè)置了默認(rèn)的分片細(xì)則
這里可以修改一下單位,把M修改成K
然后重啟mycat、將之前的數(shù)據(jù)刪除進(jìn)行測(cè)試
insert into product(id,pname)values(1,‘電腦’);db1
insert into product(id,pname)values(500000,‘手機(jī)’);db1
insert into product(id,pname)values(500001,‘空調(diào)’);db2
insert into product(id,pname)values(1000000,‘鐵鍋’);db2
insert into product(id,pname)values(1000001,‘筆記本’);db3
結(jié)論:
通過mycat中的product虛擬表進(jìn)行查詢操作
利用mycat查詢數(shù)據(jù)的流程:將sql發(fā)送到了mycat,mycat會(huì)根據(jù)schema.xml中配置將sql語句轉(zhuǎn)發(fā)給db1、db2、db3,然后這個(gè)三個(gè)數(shù)據(jù)庫分別執(zhí)行查詢?nèi)缓髮⒉樵兂鰜淼慕Y(jié)果返回給mycat,然后mycat在對(duì)得到結(jié)果集進(jìn)行整合,然后將最終的結(jié)果集返回給客戶端。
分片規(guī)則:
•默認(rèn)的是根據(jù)id的范圍進(jìn)行分片auto-sharding-long
•根據(jù)hash分片sharding-by-intfile
前提:一個(gè)字符串、對(duì)象它的哈希值是固定的
根據(jù)某個(gè)字段(id)的哈希值進(jìn)行水平切分,例如下圖中訂單表存在大量的訂單,
根據(jù)用戶id的哈希值進(jìn)行切分之后,可以保證同一個(gè)用戶的訂單在同一張表中。形成多張較小的表。
但是這樣也會(huì)存在一個(gè)問題:各個(gè)表中的數(shù)據(jù)不均勻,表也太多了,主要用于切分之后表不多的情況下使用
•取模分片mod-long
不同的對(duì)象他們的哈希值可能相同,就算哈希值不同對(duì)1024取余之后得到的余數(shù)也可能相同,可以保證同一個(gè)用戶id的數(shù)據(jù)在同一個(gè)數(shù)據(jù)庫中,同時(shí)余數(shù)相同的數(shù)據(jù)也都在同一個(gè)數(shù)據(jù)庫中,為了達(dá)到數(shù)據(jù)庫的負(fù)載均衡
以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"連接Mycat數(shù)據(jù)庫的demo",希望對(duì)大家有幫助,想了解更多可查看Mycat教程,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為您服務(wù)。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743