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

      在使用数据库中间件之前,我就想到分库分表的操作对于联表操作可能会显得非常复杂。因为如果数据是分片存储的,如果主表的数据在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.

  • 相关阅读:
    函数指针与函数声明
    long和int的区别
    pthread_create传递参数
    C语言中的static 详细分析
    linux 读写锁应用实例
    linux使用读写锁pthread_rwlock_t
    linux的<pthread.h>
    时间:UTC时间、GMT时间、本地时间、Unix时间戳
    等号赋值与memcpy的效率问题
    单链表带头结点&不带头结点
  • 原文地址:https://www.cnblogs.com/toulon/p/4832895.html
Copyright © 2011-2022 走看看