分布式表连接问题
分布式表连接问题
Mycat提供了几种方式来解决表连接问题
使用全局表
全局表是一种冗余的表,每个节点都是全量的数据,有以下特性
- 全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性
- 全局表的查询操作,只从一个节点获取
- 全局表可以跟任何一个表进行join操作
在配置表的时候加上global就是全局表
<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3">
ER Join
ER Join将子表存储位置依赖于主表,子表的记录与所关联的的父表记录存放在同一个数据分片上,为此解决了join的问题。
<!-- order表在dn1和dn2上进行水平分表 rule是分片规则,在rule.xml中进行配置 -->
<table name="order" dataNode="dn1,dn2" rule="mod_rule">
<!-- 由于join不能跨服务器进行join,所以对于order表的子表也需要与对应的order表数据分到同一个服务器上
joinKey:插入子表时会使用该列的值来查找父表存储的数据节点 -->
<childTable name="order_detail" primaryKey="id" joinKey="order_id" parentKey="id"></childTable>
</table>