溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何使用MyCat分表分庫(kù)原理分析

發(fā)布時(shí)間:2020-11-19 14:18:53 來(lái)源:億速云 閱讀:139 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章給大家分享的是有關(guān)如何使用MyCat分表分庫(kù)原理分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

MyCat是一個(gè)開(kāi)源的分布式數(shù)據(jù)庫(kù)系統(tǒng),是一個(gè)實(shí)現(xiàn)了MySQL協(xié)議的服務(wù)器,前端用戶(hù)可以把它看作是一個(gè)數(shù)據(jù)庫(kù)代理,用MySQL客戶(hù)端工具和命令行訪問(wèn),而其后端可以用MySQL原生協(xié)議與多個(gè)MySQL服務(wù)器通信,也可以用JDBC協(xié)議與大多數(shù)主流數(shù)據(jù)庫(kù)服務(wù)器通信,其核心功能是分表分庫(kù),即將一個(gè)大表水平分割為N個(gè)小表,存儲(chǔ)在后端MySQL服務(wù)器里或者其他數(shù)據(jù)庫(kù)里。

Mycat可以實(shí)現(xiàn) 讀寫(xiě)分離 分表分庫(kù)

主從復(fù)制是MySQL自帶的哈~

關(guān)于分片取模算法:  根據(jù)id進(jìn)行取模  根據(jù)數(shù)據(jù)庫(kù)集群的數(shù)量(或者說(shuō)是表數(shù)量,mycat里面一個(gè)表對(duì)應(yīng)一個(gè)庫(kù))

使用MyCat分表分庫(kù)原理分析

Mycat中的路由結(jié)果是通過(guò)分片字段和分片方法來(lái)確定的,如果查詢(xún)條件中有 id 字段的情況還好,查詢(xún)將會(huì)落到某個(gè)具體的分片。如果查詢(xún)沒(méi)有分片的字段,會(huì)向所有的db都會(huì)查詢(xún)一遍,讓后封裝結(jié)果級(jí)給客戶(hù)端。

修改/mycat/conf/log4j2.xml日志級(jí)別為debug

比如:

在查詢(xún)

select * from user_info

發(fā)送三個(gè)db請(qǐng)求

如果是查詢(xún)素有的情況下(不帶條件)

轉(zhuǎn)換成為:

select * from db1.user_info
select * from db2.user_info
select * from db3.user_info

最后把結(jié)果集給mycat進(jìn)行封裝 然后返回給客戶(hù)端

如果加個(gè)where id = 1  這樣帶條件的情況下  mycat會(huì)進(jìn)行轉(zhuǎn)換 1%3=1  在db2上!轉(zhuǎn)換成 select * from db2.user_info where id = 1 如果查詢(xún)的是分片的話,效率很高。發(fā)送一條就搞定

如果不是分片字段的話  會(huì)發(fā)送三條哦!效率很低

比如 where name = ‘jack’ 會(huì)發(fā)送三條 根據(jù)條件去每個(gè)數(shù)據(jù)庫(kù)里面進(jìn)行查詢(xún) 返回結(jié)果

tailf -200f mycat.log: 進(jìn)行實(shí)時(shí)的查看

然后迅速的查詢(xún)  一目了然

注意分頁(yè)查詢(xún):

select * from user_info limit 0,2

到底是哪個(gè)數(shù)據(jù)分片的?

往三個(gè)庫(kù)里面發(fā)三個(gè)select請(qǐng)求  獲取三對(duì) 六條結(jié)果

隨機(jī)抽取一對(duì)返回給客戶(hù)端

如果加了排序的條件呢?

 select * from user_info order by id  limit 0,2   (相當(dāng)于取出最大的兩條數(shù)據(jù))

先發(fā)送三個(gè)select 每個(gè)都是最大的兩條 然后返回給mycat  進(jìn)行綜合評(píng)選拿出最大的倆 返回給客戶(hù)端

如果是

 select * from user_info   limit 0,3

每次請(qǐng)求返回的都是在改變的 是隨機(jī)的!

db1 取兩條 db2 和 db3隨機(jī)一條

感謝各位的閱讀!關(guān)于如何使用MyCat分表分庫(kù)原理分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI