0%

分布式表连接问题

分布式表连接问题

Mycat提供了几种方式来解决表连接问题

使用全局表

全局表是一种冗余的表,每个节点都是全量的数据,有以下特性

  • 全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性
  • 全局表的查询操作,只从一个节点获取
  • 全局表可以跟任何一个表进行join操作

在配置表的时候加上global就是全局表

1
<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3">

ER Join

ER Join将子表存储位置依赖于主表,子表的记录与所关联的的父表记录存放在同一个数据分片上,为此解决了join的问题。

1
2
3
4
5
6
<!-- 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>

欢迎关注我的其它发布渠道