Mycat的分片join

  • 全局表 

       一般变动不频繁,数据量总体变化不大,数据规模不大,很少有超过数十万条记录的表可以配置成全局表,全局表具有以下特性:
      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" />

转载于:https://my.oschina.net/u/3242075/blog/2960821

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值