使用MyCat分表分庫原理分析

2021-09-23 13:54:00 字數 1310 閱讀 4254

mycat可以實現 讀寫分離 分表分庫

主從複製是mysql自帶的哈~

關於分片取模演算法:  根據id進行取模  根據資料庫集群的數量(或者說是表數量,mycat裡面乙個表對應乙個庫)

使用mycat分表分庫原理分析

mycat中的路由結果是通過分片欄位和分片方法來確定的,如果查詢條件中有 id 欄位的情況還好,查詢將會落到某個具體的分片

如果查詢沒有分片的字段,會向所有的db都會查詢一遍,讓後封裝結果級給客戶端。

修改/mycat/conf/log4j2.xml日誌級別為debug

比如:在查詢 select*from user_info

傳送三個db請求

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

轉換成為:

select * from db1.user_info

select * from db2.user_info

select * from db3.user_info

最後把結果集給mycat進行封裝 然後返回給客戶端 

如果加個where id = 1  這樣帶條件的情況下  mycat會進行轉換 1%3=1  在db2上!轉換成 select * from db2.user_info where id = 1 如果查詢的是分片的話,效率很高。傳送一條就搞定

如果不是分片字段的話  會傳送三條哦!效率很低

比如 where name = 『jack』 會傳送三條 根據條件去每個資料庫裡面進行查詢 返回結果

tailf -200f mycat.log: 進行實時的檢視

然後迅速的查詢  一目了然

注意分頁查詢:

select * from user_info limit 0,2 

到底是哪個資料分片的?

往三個庫裡面發三個select請求  獲取三對 六條結果

隨機抽取一對返回給客戶端

如果加了排序的條件呢?

select * from user_info order by id  limit 0,2   (相當於取出最大的兩條資料)

先傳送三個select 每個都是最大的兩條 然後返回給mycat  進行綜合評選拿出最大的倆 返回給客戶端

如果是   select * from user_info   limit 0,3

每次請求返回的都是在改變的 是隨機的!

db1 取兩條 db2 和 db3隨機一條

使用MyCat分表分庫原理分析

mycat可以實現 讀寫分離 分表分庫 主從複製是mysql自帶的哈 關於分片取模演算法 根據id進行取模 根據資料庫集群的數量 或者說是表數量,mycat裡面乙個表對應乙個庫 使用mycat分表分庫原理分析 mycat中的路由結果是通過分片欄位和分片方法來確定的,如果查詢條件中有 id 欄位的情況...

Mycat分庫分表原理

1 什麼是mycat mycat是乙個開源的分布式資料庫系統,是乙個實現了mysql協議的伺服器,前端使用者可以把它看作是乙個資料庫 用mysql客戶端工具和命令列訪問,而其後端可以用mysql原生協議與多個mysql伺服器通訊,也可以用jdbc協議與大多數主流資料庫伺服器通訊,其核心功能是分表分庫...

Mycat分庫分表

schema.xml 配置 name dn1 datahost localhost1 database db1 name dn2 datahost localhost1 database db2 name dn3 datahost localhost1 database db3 把localhost...