MyCat业务上规避跨库Join实现方式

全局表python

若是你的业务中有些数据相似于数据字典,好比配置文件的配置,经常使用业务的配置或者数据量不大不多变更的表,这些表每每不是特别大,并且大部分的业务场景都会用到,那么这种表适合于 Mycat 全局表,无须对数据进行切分,只要在全部的分片上保存一份数据便可,Mycat 在 Join操做中,业务表与全局表进行 Join 聚合会优先选择相同分片内的全局表 join,避免跨库 Join,在进行数据插入操做时,mycat 将把数据分发到全局表对应的全部分片执行,在进行数据读取时候将会随机获取一个节点读取数据。
目前 Mycat 没有作全局表的数据一致性检查,后续版本 1.4 以后可能会提供全局表一致性检查,检查每一个分片的数据一致性。spa

<table name="t_area" primaryKey="id" type="global" dataNode="dn1,dn2" />

 

 ER 分片表code

       有一类业务,例如订单(order)跟订单明细(order_detail),明细表会依赖于订单,也就是说会存在表的主从关系,这相似业务的切分能够抽象出合适的切分规则,好比根据用户 ID 切分,其余相关的表都依赖于用户 ID,再或者根据订单 ID 切分,总之部分业务总会能够抽象出父子关系的表。这类表适用于 ER 分片表,子表的记录与所关联的父表记录存放在同一个数据分片上,避免数据 Join 跨库操做。
       以 order 与 order_detail 例子为例,schema.xml 中定义以下的分片配置,order,order_detail 根据 order_id进行数据切分,保证相同 order_id 的数据分到同一个分片上,在进行数据插入操做时,Mycat 会获取 order 所在的分片,而后将 order_detail 也插入到 order 所在的分片。xml

<table name="order" dataNode="dn$1-32" rule="mod-long">
    <childTable name="order_detail" primaryKey="id" joinKey="order_id" parentKey="order_id" />
</table>
相关文章
相关标签/搜索