当前位置 : 首页 » 文章分类 :  开发  »  MyCat

MyCat

MyCat 使用笔记

官网
http://mycat.org.cn/

MyCat 权威指南
http://www.mycat.org.cn/document/mycat-definitive-guide.pdf

MyCATApache / Mycat-Server
https://github.com/MyCATApache/Mycat-Server


MyCat分库分表

MyCat分库分表原理

mycat里面通过定义路由规则来实现分片表(路由规则里面会定义分片字段,以及分片算法)。分片算法有多种,你所说的hash是其中一种,还有取模、按范围分片等等。在mycat里面,会对所有传递的sql语句做路由处理(路由处理的依据就是表是否分片,如果分片,那么需要依据分片字段和对应的分片算法来判断sql应该传递到哪一个、或者哪几个、又或者全部节点去执行)

分页查询

无排序分页

例如
select * from user limit 2;
mycat 无法保证每次返回的结果相同,哪个 DB node 先返回,就返回哪个。
所以,在Mycat中进行分页操作时必须显示加上排序条件才能保证结果的正确性

无offset的排序分页

select * from user order by id limit 2;
mycat 内部使用一个 最小堆(选最小值不应该是用最大堆吗?) 对各个 db node 返回的结果进行合并后返回 limit 2 。

有offset的排序分页

mycat 会改写sql,比如
select * from user order by id limit 10,2;
改写为
select * from user order by id limit 12;
limit m,n 改写为 limit 0, m+n
之后发送到各个 db node,再在内存中对所有结果进行内存分页。

Mycat从入门到放弃
https://blog.csdn.net/u013235478/article/details/53178657

MyCat分库分表策略详解
https://my.oschina.net/zhangxufeng//3097533


MyCat配置示例

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="blog" checkSQLschema="false" sqlMaxLimit="100">
        <table name="blog_alert" dataNode="dn0,dn1,dn2,dn3" rule="sharding-by-hashMod" primaryKey="id" autoIncrement="true" />
        <table name="blog_api_log" dataNode="dn0,dn1,dn2,dn3" rule="sharding-by-hashMod" primaryKey="id" autoIncrement="true"/>
        <table name="blog_role" dataNode="dn0" />
        <table name="blog_user" dataNode="dn0" />
        <table name="blog_user_role" dataNode="dn0" />
        <table name="blog_dict" dataNode="dn0" />
        <table name="mycat_sequence" primaryKey="name" dataNode="dn0"></table>
    </schema>

    <dataNode name="dn0" dataHost="hostWeb02" database="blog1" />
    <dataNode name="dn1" dataHost="hostWeb02" database="blog2" />
    <dataNode name="dn2" dataHost="hostWeb02" database="blog3" />
    <dataNode name="dn3" dataHost="hostWeb02" database="blog4" />

    <dataHost name="hostWeb02" maxCon="2000" minCon="100" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select 1</heartbeat>
        <writeHost host="hostM1" url="localhost:3306" user="root"  password="passwd"></writeHost>
    </dataHost>
</mycat:schema>

上一篇 Java-Net

下一篇 typesafe.config与HOCON

阅读
评论
579
阅读预计3分钟
创建日期 2020-08-31
修改日期 2020-11-05
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论