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中的外键。spa

  在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.code

相关文章
相关标签/搜索