首頁  >  文章  >  資料庫  >  mycat分庫分錶原理分析

mycat分庫分錶原理分析

藏色散人
藏色散人原創
2019-06-15 14:49:289238瀏覽

mycat分庫分錶原理分析

MyCat是一個開源的分散式資料庫系統,是實作了MySQL協定的伺服器,前端使用者可以把它看成是一個資料庫代理,用MySQL客戶端工具和命令列訪問,而其後端可以用MySQL原生協定與多個MySQL伺服器通信,也可以用JDBC協定與大多數主流資料庫伺服器通信,其核心功能是分錶分庫,即將一個大表水平分割為N個小表,儲存在後端MySQL伺服器或其他資料庫裡。

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分庫分錶原理分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn