全局表
在所有节点都保存一份一样的数据
schema.xml 配置如下:
<table name="city" primaryKey="id" type="global" dataNode="dn1,dn2,dn3" />
通过mycat往全局表city插入2条记录,发现每个分片节点都有数据
ER表
就是常说的父子表,通过主外键关联表
假设有2张表
t_order_0 和 t_order_item_0 通过 order_id 关联,order_id 不是 t_order_0 的主键,配置如下
schema.xml 配置如下:
<table name="t_order_0" primaryKey="id" dataNode="dn1,dn2,dn3" rule="order-mod-long" >
<childTable name="t_order_item_0" primaryKey="id" joinKey="order_id" parentKey="order_id" >
</childTable>
</table>
rule.xml 配置如下:
<tableRule name="order-mod-long">
<rule>
<columns>order_id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<property name="count">3</property>
</function>
通过mycat往t_order_0 和 t_order_item_0分别插入3条记录
发现 order_id 一样的都会分配到同1个分片节点
这样根据order_id 把order_id 一样的 t_order_0 和 t_order_item_0 表记录存储相同节点上,就可以级联查询了
看下mycat怎么执行的
explain select o.*,i.order_id as joinkey from t_order_0 o INNER JOIN t_order_item_0 i on o.order_id=i.order_id
执行结果