mycat subtables
时间: 2023-07-01 22:13:04 浏览: 154
Mycat-server
5星 · 资源好评率100%
在MyCAT中,Subtables是指将一张大表拆分成多个小表存储在不同的数据节点上,以实现数据分片存储的一种方式。Subtables分片方式和普通的分片方式(如Range、Hash、Enum等)不同,它是基于表的行数或者表的大小进行分片的。
在MyCAT中,我们可以通过在schema.xml文件中配置Subtables,来实现对表的拆分。下面是一个示例:
```xml
<table name="user" dataNode="dn1,dn2" rule="mod-long" keyColumn="id">
<childTable name="user_info_1" primaryKey="id" primaryKeyType="long">
<rule name="user_info_1" parentColumn="id" parentTable="user">
<tables>user_info_1_0,user_info_1_1,user_info_1_2</tables>
<algorithm>mod-long</algorithm>
<columns>id</columns>
<shard>user_info_1_${id % 3}</shard>
</rule>
</childTable>
<childTable name="user_info_2" primaryKey="id" primaryKeyType="long">
<rule name="user_info_2" parentColumn="id" parentTable="user">
<tables>user_info_2_0,user_info_2_1,user_info_2_2</tables>
<algorithm>mod-long</algorithm>
<columns>id</columns>
<shard>user_info_2_${id % 3}</shard>
</rule>
</childTable>
</table>
```
上述配置表示将user表按照id字段的值进行分片,将id值对3取模为0的数据存储到dn1的user_info_1_0和user_info_2_0表中,将id值对3取模为1的数据存储到dn2的user_info_1_1和user_info_2_1表中,将id值对3取模为2的数据存储到dn1的user_info_1_2和user_info_2_2表中。
需要注意的是,Subtables的配置需要按照一定的规则进行,如每个子表的表名必须以父表名和序号组成,父表和子表之间需要定义关联键等。同时,在使用Subtables时,需要保证所有子表中的数据的总量是相等的,否则可能会导致数据的不均衡,影响系统的性能。
阅读全文