欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 【经验分享】MyCAT 中间件

【经验分享】MyCAT 中间件

2025/6/6 20:37:17 来源:https://blog.csdn.net/Falcon__/article/details/142639349  浏览:    关键词:【经验分享】MyCAT 中间件

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

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

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

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

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

Mycat最重要的3大配置文件

server.xml

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

schema.xml

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

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

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

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

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

<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

    <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个库

# range start-end ,data node index
# K=1000,M=10000.
0-2=0
3-4=1
5-6=2

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词