mycat的分库分表

mycat的分库分表

在schema.xml里面配置逻辑表和切片规则,注意rule选项

配置数据节点dataNode

配置dataHost

在rule.xml里面配置切片属性

配置切片function

由于本例中主要使用ID数值范围切分auto-sharding-long和取模切分mod-long.关于其他切片规则请参阅文档最后附录1。


配置切片规则文件

在mycat的conf与schema.xml同级目录下新建customer-partition-long.txt文本文档,并编辑.


关于其他如一致性hash之类规则文件mapfile,在conf目录下,请自行查阅.

连接测试

启动mycat:进入mycat安装目录,执行如下命令

E:\DevelopTools\mycat\bin> mycat start

如出现如下则表示启动成功。如失败请查阅日志wrapper.log


使用可视化连接工具连接mycat,注意端口8066,如无法连接请注意检查8066端口是否开放。


连接成功就会看到已配置过的schema和表


Mycat的join操作

mycat 支持跨分片join,主要有四种方法:

1.全局表

可以使用字典表(变动不频繁,数据量总体变化不大,数据规模很少超过10万)作为全局表

特性:

1)全局表的插入,更新操作时在所有节点上执行,保持各个数据分片的一致性。没有太频繁的update操作

2)全局表查询只从一个节点获取

3)全局表可以和任意一个表进行join操作

4)多线程update可以不是同一条记录,如果多线程update全局表同一条记录会出现死锁。可以批量insert操作

配置:

<table name="tableName" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />

不用写rule规则,要在所有节点为执行DDL语句

2.ER分片

子表的存储位置依赖于主表,子表的记录与所关联的父表记录存放在同一个数据分片上,避免数据Join跨库操作。

比如有一类业务,订单(order)和订单明细(order_detail),明细表会依赖订单表,也就是说存在表的主从关系。这类表适用于ER分片表,子表的记录与所关联的父表记录存放在同一个分片上,避免数据的JOIN跨库操作

以order与order_detail 为例,schema.xml 中定义如下分片配置,order、order_detail 根据order_id 进行数据分片,保证相同的order_id的数据分到同一个分片上,在进行数据插入操作时,mycat会获取order所在在分片,然后将order_detail 也插入到order所在的分片。
<table name="order" dataNode="dn$1-32" rule="mod-long">
<childTable name="order_detail" primaryKey="id" joinKey="order_id" parentKey="order_id" />
</table>

3.Catlet人工智能

mycat提供api ,通过编程解决业务系统中特定几个必须跨分片的SQL 的JOIN 逻辑。

4.ShareJoin(暂不成熟,测试环境可以使用,生产环境不建议使用)

ShareJoin 是一个简单的跨分片 Join,基于 HBT 的方式实现。目前支持 2 个表癿的join,原理就是解析 SQL 语句,拆分成单表的 SQL 语句执行,然后把各个节点的数据汇集

Mycat性能建议:

1.使用inner join ,尽量避免使用left join ,right join

2.使用left join,right join时 on条件会先执行,where条件会后执行。在使用时,条件尽量写的on后面,减少where的执行

3.少用子查询,用join

FAQ

Q:Mycat启动报错怎么办

A:启动报错,查阅mycat里面logs目录下的wrapper.log

Q:启动报找不到类怎么办

A:看是否是版本问题,低版本用的是org.opencloudb.route.function.* , 后续高版本已经换用io.mycat.route.function.*

Q:为什么连接mycat会很慢很卡,甚至假死

A:调整mycat堆内存,根据本机性能,在wrapper.conf里面相应调小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值