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