开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(三):MyCat - 架构剖析 - 核心技术之 SQL 路由实现】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/757/detail/13302
MyCat - 架构剖析 - 核心技术之 SQL 路由实现
内容介绍
一、 路由的作用
二、 SQL 解析器
一、 路由的作用
MyCat 的路由是和 SQL 解析组件息息相关的,SQL 路由模块是 MyCat 数据库中间件最重要的模块之一,使用 MyCat 主要是为了分库分表,而分库分表的核心就是进行 SQL 路由。
如图所示, MyCat 接收到应用系统发来的查询语句,要将其发送到后端连接的 MySQL 数据库去执行,但是后端由三个数据库服务器,具体要查询哪一台数据库服务器,就是路由需要实现的功能。
前端用户即应用程序链接的是 Mycat,并不直接连接 MySQL,应用程序要想执行 MySQL 语句,应用程序会发送一句 SQL 语句给 Mycat,Mycat 要去执行这句 SQL 语句进行查询,它将到哪一个分线进行查询,这些并不是固定的,这些都是要通过 Mycat 的 SQL 路由模块来进行计算的。
假如操作这张表,在对这张表在进行分片设计的时候,是根据 status 进行枚举分片, status 为 0 存储第一个节点, status 为 1 存储第二个节点, status 为 2 存储第三个节点。
当我们根据 status 字段来进行查询时, Mycat 首先会接收到客户(应用程序)发送的 SQL 语句,然后需要对 SQL 语句进行判定,判定当前条件 status 为0到底在哪个分线当中,确定分线之后,会将 SQL 语句路由到分线当中,然后在分线中执行,最后将分线结果返回回来,并不是每一次都到三个分线当中。
Mycat 在进行 SQL 路由当中既要保证数据的完整性,还要保证不造成资源的浪费,还要保证路由的效率。
例:
若 MyCat 输入的 SQL 语句为 select * from user where
states in (‘0’,‘1’)
,根据他的 SQL 路由会到 dn1,dn2 分线中查询,然后把分线中查询的数据返回给 MyCat ,在 MyCat 中进行统计汇总。
二、SQL 解析器
Mycat1.3 版本之前模式使用的是 Fdbparser 的开源 SQL 解析器,在 2015 年被 apple 收购后,从开源变成闭源了。目前版本的 Mycat 采用的是 Druid 的 SQL 解析器,性能比采用 Fdbparser 整体性能提高 20% 以上。