• 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.

  • 相关阅读:
    JSP简单访问数据库
    解析数据存储MySQL
    学习SSH框架
    JavaWEB中读取配置信息
    Eclipse中将Java项目转换成Web项目的方法
    JavaWEB入门
    万能数据库连接类-Oracle、DB2 、Access 、Sql Server
    小米3 打开开发者选项
    coolpad 5879logcat不能输入日志解决办法
    实用开发之-oracle表回滚到一个指定时间的操作语句
  • 原文地址:https://www.cnblogs.com/toulon/p/4832895.html
Copyright © 2020-2023  润新知