MyCat全局表和ER--笔记(三)
全局表
全局表的作用
在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联,就成了比较棘手的问题,考虑到字典表具有以下几个特性:
- 变动不频繁
- 数据量总体变化不大
- 数据规模不大,很少有超过数十万条记录。
鉴于此,MyCAT 定义了一种特殊的表,称之为“全局表”,全局表具有以下特性:
- 全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性
- 全局表的查询操作,只从一个节点获取
- 全局表可以跟任何一个表进行 JOIN 操作
全局表配置(配置所有可能用到节点)
<table name="TBL_LOG" primaryKey="ID" type="global" dataNode="dn1,dn2" />
全局表说明
1、准对Select操作,mycat会随机现在一个节点输出结果内容;
2、准对Insert-Update-Delete操作,Mycat会操作所有节点
E-R分片表
也称为父子表,主外键关联表;处理存在2种请求对应关系。
1、父表的分片字段是子表的外键字段:
这种情况下,父表通过分片字段查询能很快定位到数据库的位置提高查询性能;子表通过父表ID也能很快定位到分片服务器数据库地址;
<table name="ORDER1" primaryKey="ID" dataNode="dn1,dn2" rule="mod-long"> <childTable name="ORDER_DETAIL" primaryKey="ID" joinKey="ORDER_ID" parentKey="ID" /> </table>
2、父表的分片字段不是子表的外键字段:
这种情况下,父表通过分片字段查询能很快定位到数据库的位置提高查询性能;子表通过父表ID查询时,Mycat将遍历所有节点数据,实现数据查询;
<table name="ORDER2" primaryKey="ID" dataNode="dn1,dn2" rule="province-str"> <childTable name="ORDER_DETAIL2" primaryKey="ID" joinKey="ORDER_ID" parentKey="ID" /> </table>