使用MyCat分表分庫原理分析


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隨機一條

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM