【经验分享】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
相关推荐
风清云淡_A5 分钟前
【JPA】spring集成jpa实战之数据增删改查入门教程(二)
java
让我上个超影吧6 分钟前
天机学堂——播放进度方案优化
java·spring boot·redis·spring cloud
月空MoonSky9 分钟前
解决使用Notepad++出现异型字或者繁体字体问题
java·javascript·notepad++
深入技术了解原理14 分钟前
引入eureka依赖但是无法注册:无法解析配置属性 ‘eureka.client.service-url.defaultZone‘
spring boot·spring cloud·云原生·eureka
Filotimo_19 分钟前
JWT的概念
java·开发语言·python
min18112345620 分钟前
软件升级全流程步骤详解
android·java·服务器
黎雁·泠崖22 分钟前
Java字符串系列总结篇|核心知识点速记手册
java·开发语言
biyezuopinvip28 分钟前
基于Spring Boot的社区互助平台设计与实现(毕业论文)
java·spring boot·vue·毕业设计·论文·毕业论文·社区互助平台设计与实现
Coder_Boy_35 分钟前
基于SpringAI的在线考试系统-试卷管理与考试管理模块联合回归测试文档
人工智能·spring boot·架构·领域驱动
J_liaty36 分钟前
Redis公共方法详解
spring boot·redis·后端