- 全局表
一般变动不频繁,数据量总体变化不大,数据规模不大,很少有超过数十万条记录的表可以配置成全局表,全局表具有以下特性:
1.全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性
2.全局表的查询操作,只从一个节点获取
3.全局表可以跟任何一个表进行JOIN操作
全局表配置比较简单,不用写 Rule 规则,如下配置即可:
<table name="t_global" primaryKey="ID" type="global" dataNode="sdn$0-2" />
- ER Join
MyCAT 借鉴了 NewSQL 领域的新秀 Foundation DB 的设计思路,Foundation DB 创新性的提出了Table Group 的概念,其将子表的存储位置依赖于主表,并且物理上紧邻存放,因此彻底解决了 JION 的效率和性能问题,根据这一思路,提出了基于 E-R 关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上。
#所有订单明细数据会和主表保证在同一个分片上
<table name="tb_order" primaryKey="id" dataNode="sdn0,sdn1,sdn2" rule="mod-long">
<childTable name="tb_order_detail" joinKey="order_id" parentKey="id"/>
</table>
- Share join
ShareJoin 是一个简单的跨分片 Join,基于 HBT 的方式实现。目前支持 2 个表的 join,原理就是解析 SQL 语句,拆分成单表的 SQL 语句执行,然后把各个节点的数据汇集。
#支持任意配置的 A,B 表如
#1.A,B 的 dataNode 相同
<table name="A" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
<table name="B" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
#2.A,B 的 dataNode 不同
<table name="A" dataNode="dn1,dn2 " rule="auto-sharding-long" />
<table name="B" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
#3.A,B 的 dataNode 不同
<table name="A" dataNode="dn1 " rule="auto-sharding-long" />
<table name="B" dataNode=" dn2,dn3" rule="auto-sharding-long" />