zoukankan      html  css  js  c++  java
  • mycat学习日记:关于联表查询

    https://www.cnblogs.com/toulon/p/4832895.html

      在使用数据库中间件之前,我就想到分库分表的操作对于联表操作可能会显得非常复杂。因为如果数据是分片存储的,如果主表的数据在1分片,从表对应的数据在2分片,那么这一次联表查询就需要跨节点,如果业务再复杂一点,显然会造成不必要的性能损耗。今天在研究mycat文档的时候看到mycat很巧妙的解决了这个问题:

      ”MyCAT借鉴了NewSQL领域的新秀Foundation DB的设计思路,Foundation DB创新性的提出了Table Group的概念,其将子表的存储位置依赖于主表,并且物理上紧邻存放,因此彻底解决了JION的效率和性能问题,根据这一思路,提出了基于E-R关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上。“

      目前有两个表:tab_user(id,name) 和 tab_orders(id,user_id), tab_user中的id作为orders中的外键。

      在schema.xml进行配置:  

    <table name="tab_user" dataNode="dn1,dn2" rule="mod-long">
        <childTable name="tab_orders"  joinKey="user_id" parentKey="id"/>
    </table>

      这段配置代码,告诉了mycat将tab_orders的user_id和tab_user的id关联起来,在对orders表进行插入操作时,将会判断插入数据的user_id处于哪一个分片,然后将数据插入该分片,这样便实现了将关联数据存放在一个分片的目的。当然,如果关联了更多的表,就继续在childTable下面配置childTable.

  • 相关阅读:
    【Quartz】Quartz将Job保存在数据库中所需表的说明
    第十章 springboot + logback
    第二章 rabbitmq在mac上的安装
    第九章 springboot + mybatis + 多数据源 (AOP实现)
    第一章 AOP
    第八章 springboot + mybatis + 多数据源
    第三章 线程安全的DateFormat工具类
    第六章 consul UI
    第五章 consul key/value
    附1 consul常用命令+常用选项
  • 原文地址:https://www.cnblogs.com/kelelipeng/p/10330521.html
Copyright © 2011-2022 走看看