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分库分表道理剖析的细致内容,更多请关注ki4网别的相干文章!