码迷,mamicode.com
首页 > 其他好文 > 详细

读书笔记-Mycat权威指南-08-Mycat中的Join

时间:2017-08-26 12:46:04      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:mda   策略   编程   das   读书笔记   atl   依赖   拆分   简单   

Join

Join 绝对是关系型数据库中最常用一个特性,然而在分布式环境中,跨分片的 join 确是最复杂的,最难解决一 个问题。

Join:inner ,left,right,full,cross

尽量避免使用 Left join 或 Right join,而用 Inner join。

在使用 Left join 或 Right join 时,ON 会优先执行,where 条件在最后执行,所以在使用过程中,条件尽 可能的在 ON 语句中判断,减少 where 的执行少用子查询,而用 join。

Mycat 目前版本支持跨分片的 join,主要实现的方式有四种:全局表,ER 分片,catletT(人工智能)和 ShareJoin,ShareJoin 在开发版中支持,前面三种方式 1.3.0.1 支 持。

全局表

各个分片冗余存储

ER分片

将子表的存储位置依赖于主表,并且物理上紧邻存放,因此彻底解决了 JION 的效率和性能问题。

根据这一思路,提出了基于 E-R 关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分 片上。

Share Join

ShareJoin 是一个简单的跨分片 Join,基于 HBT 的方式实现。 原理就是解析 SQL 语句,拆分成单表的 SQL 语句执行,然后把各个节点的数据汇 集。

catlet(人工智能)

解决跨分片的 SQL JOIN 的问题,远比想象的复杂,而且往往无法实现高效的处理。

既然如此,就依靠人工 的智力,去编程解决业务系统中特定几个必须跨分片的 SQL 的 JOIN 逻辑。

MyCAT 提供特定的 API 供程序员调用,这就是 MyCAT 创新性的思路——人工智能。

以一个跨节点的 SQL 为例。 Select a.id,a.name,b.title from a,b where a.id=b.id 其中 a 在分片 1,2,3 上,b 在 4,5,6 上,需要把数据全部拉到本地(MyCAT 服务器),执行 JOIN 逻辑。

 

读书笔记-Mycat权威指南-08-Mycat中的Join

标签:mda   策略   编程   das   读书笔记   atl   依赖   拆分   简单   

原文地址:http://www.cnblogs.com/shizheyangde/p/7434892.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!