mycat全局表和ER表

全局表

在所有节点都保存一份一样的数据

schema.xml 配置如下:

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

通过mycat往全局表city插入2条记录,发现每个分片节点都有数据

ER表

就是常说的父子表,通过主外键关联表

假设有2张表

t_order_0 和 t_order_item_0 通过  order_id 关联,order_id 不是 t_order_0 的主键,配置如下

schema.xml 配置如下:

<table name="t_order_0" primaryKey="id" dataNode="dn1,dn2,dn3" rule="order-mod-long" >

         <childTable name="t_order_item_0" primaryKey="id" joinKey="order_id" parentKey="order_id" >

         </childTable>

</table>

rule.xml 配置如下:

<tableRule name="order-mod-long">

        <rule>

            <columns>order_id</columns>

            <algorithm>mod-long</algorithm>

        </rule>

</tableRule>

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">       

        <property name="count">3</property>

 </function>

通过mycatt_order_0 和 t_order_item_0分别插入3条记录

发现 order_id  一样的都会分配到同1个分片节点

这样根据order_id order_id 一样的 t_order_0 和 t_order_item_0 表记录存储相同节点上,就可以级联查询了

看下mycat怎么执行的

explain select o.*,i.order_id as joinkey from t_order_0 o INNER JOIN t_order_item_0 i on o.order_id=i.order_id

执行结果

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分片和单join是数据库中常见的操作。首先,让我们来了解一下这两个概念。 分片是指将一个的数据划分成多个分片(或者称为分区),每个分片可以存储在不同的物理节点上。这样做的目的是为了提高数据库的性能和扩展性。每个分片都包含了整个的一部分数据,通常是根据某个列或者规则进行划分。 单join是指在查询中将两个或多个通过某个共同的字段进行连接,得到一个结果集。这样可以通过连接字段将不同中的相关数据合并在一起,使得查询结果更加丰富和完整。 当分片和单join同时存在时,需要注意以下几点: 1. 数据分布:由于分片的数据被划分到不同的节点上,可能需要跨节点进行join操作。这会导致网络开销和性能下降。因此,在设计分片方案时需要考虑数据的分布情况,尽量减少跨节点join的次数。 2. 查询优化:由于join操作可能涉及多个节点,需要进行全局查询优化。可以通过数据预先分片、索引优化、缓存等手段来提高查询性能。 3. 数据一致性:分片的数据可能有延迟复制或者异步同步,这会导致数据的一致性问题。在进行join操作时,需要注意数据是否已经同步到了目标节点,以避免脏读或不一致的结果。 总之,分片和单join是数据库中常见的操作,但由于其涉及到跨节点的数据访问和一致性问题,需要在设计和执行阶段有针对性地进行优化和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值