【经验分享】MyCAT 中间件

学习了一下数据量过大的解决方案,使用 MyCAT 中间件。

MyCAT 可以解决分布式事务、读写分离、主从、分片等一系列MySQL集群和分布式问题。 整体过程可以概括为拦截 - 分发 - 响应

例如设置 MyCAT 分片规则为每500万条数据就换一个数据库存储。

分库分表的中心思想都是将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。

分库分表的形式,主要是两种:垂直拆分和水平拆分。而拆分的粒度,一般分为分库和分表。

Mycat最重要的3大配置文件

server.xml

配置 MyCAT 数据库的账号和密码配置文件

schema.xml

主要记录了主从库等相关信息

writeHost 为写入节点,readHost为读取节点

schema 标签的 name 属性为 MyCAT 访问看到的数据库名(逻辑库名)

XML 复制代码
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
    <table name="test" dataNode="mycat1,mycat2,mycat3" rule="auto-sharding-long"/>
</schema>

dataNode 属性配置为表切分后,例如分别对应 localhost1 的三个库

XML 复制代码
<dataNode name="mycat1" dataHost="localhost1" database="mycat1" />
<dataNode name="mycat2" dataHost="localhost1" database="mycat2" />
<dataNode name="mycat3" dataHost="localhost1" database="mycat3" />

table标签是逻辑表的配置,其中一共包含9个可配置的属性,参数释义如下所示:

  1. .name:对应MySQL中的表名。

  2. .dataNode:逻辑表所在的分片,该属性值需要和dataNode标签的name属性对应。

  3. .rule:逻辑表使用的分片规则名称。规则在conf/rule.xml中配置,该属性值必须与tableRule标签中的name属性值对应。

  4. .ruleRequired:是否绑定分片规则,如果为true,就一定要配置rule。

  5. .primaryKey:逻辑表对应真实表的主键。

  6. .type:逻辑表类型,分为全局表和普通表,后面会详细说明该属性。

  7. .autoIncrement:是否启用从自增主键,对应MySQL自增主键,默认是禁用的。

  8. .subTable:分表,MyCAT1.6以后开始支持该属性。

  9. .needAddLimit:是否允许自动添加在schema标签中设置的limit,默认为true。

rule.xml

MyCAT通过rule.xml配置水平分表策略,通过schema.xml(使用table标签)指定表的分表策略。

常见的分片规则

  • 取模算法

  • 按日期分片算法

案例使用 ID 范围分片为例,使用 name 为 auto-sharding-long ,读取的分片规则文件定义在 autopartition-long.txt

XML 复制代码
    <tableRule name="auto-sharding-long">
        <rule>
            <columns>id</columns>
            <algorithm>rang-long</algorithm>
        </rule>
    </tableRule>
​
    <function name="rang-long"
              class="io.mycat.route.function.AutoPartitionByLong">
        <property name="mapFile">autopartition-long.txt</property>
    </function>

autopartition-long.txt

修改为 id 范围0-2的为第0个库,3-4为第1个库,5-6为第2个库

bash 复制代码
# range start-end ,data node index
# K=1000,M=10000.
0-2=0
3-4=1
5-6=2
相关推荐
多喝开水少熬夜16 分钟前
算法-哈希表和相关练习-java
java·算法·散列表
昵称为空C17 分钟前
SpringBoot基于注解的数据库字段回填方案
spring boot·spring
shayudiandian37 分钟前
【Java】面向对象编程
java
optimistic_chen1 小时前
【Java EE进阶 --- SpringBoot】Spring 核心 --- AOP
spring boot·笔记·spring·java-ee·aop·java注解
asom221 小时前
互联网大厂Java求职面试实战:Spring Boot到Kubernetes的技术问答
java·spring boot·kubernetes·oauth2·电商·microservices·面试技巧
I_Jln1 小时前
CountDownLatch:让多线程同步如此简单
java
虎子_layor1 小时前
轻量级哈希扰动工具:Hashids,快速上手
java·spring
逻极1 小时前
VS Code之Java 开发完全指南:从环境搭建到实战优化
java·开发语言
Moe4881 小时前
JDK动态代理和CGLIB动态代理源码解析
java·后端
月月玩代码1 小时前
SLF4J,简单门面Java日志框架
java·开发语言