【Mycat 1.6 之路由与分发流程】

标签: mycat 路由 | 发表时间:2016-11-19 20:47 | 作者:
出处:http://www.iteye.com

一、Mycat 的路由与分发流程

从原理上来看,可以把 mycat 看成一个 sql 转发器。mycat 接收到前端发来的 sql,然后转发到后台的 mysql 服务器上去执行。但是后面有很多台 mysql 节点(如 dn1,dn2,dn3),该转发到哪些节点呢?这就是路由解析该做的事情了。路由能保证 sql 转发到正确的节点。转发的范围是刚刚好,不多发也不少发。多发会出现两种问题:浪费性能和找不到表。比如一个 select * from orders where pro=‘wuhan’这个语句,只有 dn1 节点,能查到数据,如果将语句同时转发到 dn1、dn2、dn3 三个节点,这样的范围就多发了,性能上是一种浪费。如果新增了一个节点 dn4,但是 orders 的 datanode 范围只是 dn1,dn2,dn3,如果同时转发到 dn1、dn2、dn3、dn4 四个节点,则发到 dn4 执行时会返回 table orders not exists。少发则会出现结果集不全的问题,如 select * from  orders 如果只转发到 dn1,只会返回 dn1 上的结果集,dn2、dn3 上的结果集得不到。

 

二、解析器之fdb parser  VS druidparser 

路由解析使用了策略模式,每种解析器实现一种路由策略。还可以继续扩展,如 Druid 解析再细分 Mysql、

postgresql、oracle 等实现策略。

解析器指的是 sql 解析器,mycat1.3 之前使用的解析器为 fdb parser(FoundationDB SQL Parser),从 1.3

开始引入 druid 解析器,从 1.4 开始去掉了 fdbparser,只保留 druidparser 方式。

 

druid 路由解析的两种方式

Druid 解析有两种方式:vistor 方式和 statement 方式。

 

三、路由计算的核心要素

1、sql 中包含的表名

2、sql 中包含的条件(Conditons),每个 Condition 是一个<表名、字段名、字段值>的 3 元组。

3、表对应的 schema。

4、表是否分片,如果分片,分片字段是什么?分片算法是什么?第 4 点的信息都可以根据第 3 条计算获得。

有以上一些数据就能计算出路由,所以路由计算需要解决以下问题:

从 sql 语句中提取出表名、条件(字段、字段所属表、字段值)。有了表名、条件,再根据表的分片规则就

可以计算出准确的路由了。

 

四、路由计算流程

1)单表路由计算流程



 

 

2)多表路由计算流程

 


3)全局表的路由计算

全局表 insert、update 语句:路由到所有节点。

全局表 select 语句:路由到任意一个节点。

 

 

4)or 语句问题解决方案思想—等价替换

解决 or 语句的路由的基本思想是等价替换。

1、使用 union 语句拆分 or 语句的等价替换

这个等价替换应该是大家都知道的

Select * from travelrecord where id = 1 or id = 5000001 等价于以下语句:

Select * from travelrecord where id = 1 unioin Select * from travelrecord where id = 5000001

2、Union 语句的结果集并集 等价于路由的并集

这个等价没有明确的理论基础,但是我们可以反证法证明:

如果路由集合不同,那么结果集必然不同,所以结果集相同,路由集合必然相同。

Select * from travelrecord where id = 1 or id = 5000001 的路由集合

等价于 Select * from travelrecord where id = 1 的路由集合与 Select * from travelrecord where id =

5000001 的路由集合的并集。

最终演变成对 Select * from travelrecord where id = 1 和 Select * from travelrecord where id =

5000001 两个语句分别求路由,然后取并集。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [mycat 路由] 推荐:

【Mycat 1.6 之路由与分发流程】

- - ITeye博客
一、Mycat 的路由与分发流程. 从原理上来看,可以把 mycat 看成一个 sql 转发器. mycat 接收到前端发来的 sql,然后转发到后台的 mysql 服务器上去执行. 但是后面有很多台 mysql 节点(如 dn1,dn2,dn3),该转发到哪些节点呢. 路由能保证 sql 转发到正确的节点.

MyCat集群部署(HAProxy + MyCat)

- - 行业应用 - ITeye博客
参考实战视频: http://www.roncoo.com/course/view/85d6008fe77c4199b0cdd2885eaeee53. 《高可用架构篇--第13节--MySQL源码编译安装(CentOS-6.6+MySQL-5.6)》. 《高可用架构篇--第14节--MySQL主从复制的配置(CentOS-6.6+MySQL-5.6)》.

Mycat 入门

- - 数据库 - ITeye博客
MyCAT是mysql中间件,前身是阿里大名鼎鼎的Cobar,Cobar在开源了一段时间后,不了了之. 于是MyCAT扛起了这面大旗,在大数据时代,其重要性愈发彰显. 这篇文章主要是MyCAT的入门部署. 因Mycat是用java开发的,所以需要在实验环境下安装java,官方建议jdk1.7及以上版本.

秒懂mycat

- - arccode
阿里开源的一个数据库中间件,专门为大数据量的项目做分库分表用的. 一个彻底开源的,面向企业应用开发的大数据库集群. 支持事务、ACID、可以替代MySQL的加强版数据库. 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群. 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server.

Mycat之——Mycat集群部署(基于HAProxy + Mycat)

- - CSDN博客推荐文章
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/75331934. 操作系统:CentOS-6.5-x86_64. JDK版本:jdk1.7.0_80. HAProxy版本:haproxy-1.5.19.tar.gz. Mycat版本:Mycat-server-1.5.1-RELEASE-20170717215510-linux.tar.gz (自行下载源码编译).

mycat 数据库中间件

- - Oracle - 数据库 - ITeye博客
出处:http://blog.csdn.net/nxw_tsp/article/details/56277430. 实习的时候,在一个项目当中,项目经理要求把原先的MySQL数据连接基于mycat来进行改造. 当时就在想MyCat是什么东西. MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里.

MySQL HA Solution 2019(3)MyCat

- - 企业架构 - ITeye博客
0  . 0  .       .

MySQL分布式中间件:MyCAT

- - 标点符
随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上. 这时集中式数据库系统表现出它的不足:. 集中式处理,势必造成性能瓶颈;. 应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性不高;. 集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差.

Mycat 设置全局序列号

- - 数据库 - ITeye博客
在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一. 为此,MyCat 提供了全局sequence,并且提供了包含本地配置和数据库配置等多种实现方式. 原理:此方式MyCAT将sequence配置到文件中,当使用到sequence中的配置后,MyCAT会更下classpath中的sequence_conf.properties文件中sequence当前的值.

MyCat 数据库实践注意事项

- - 掘金后端
最近两周研究了一下 MyCat ,下载了一份官方的实践指南,搜了几篇部署介绍,启动了三个虚拟机节点,然后就开始了验证过程. 毕竟不是专业 DBA,我的首要目标是弄清楚如何部署,产品从普通 MySQL 数据库迁移到 MyCat 需要注意的事项. 抓主要矛盾,了解关键技术点,解决关键疑惑,有一本书叫《关键20小时,快速学会任何技能》,跟它的核心思想类似.