mycat sql解析模块分析

mycat sql解析模块是mycat实现sql路由模块和sql结果集后处理模块的基础,在mycat的几大模块里面占据相当重要的位置。这篇文章首先简单介绍mycat里面sql解析模块的作用,后面结合部分源码来看这个模块的功能。

本文分析的mycat版本为1.6。假如你使用的是1.4或者1.5,也没关系,因为sql解析功能在1.4和更高版本在大方向上是没怎么变化的。在这里,我们只分析mycat服务(server)端口的sql解析。对于mycat管理(manager)端口的sql解析,不在本文讨论范围内。

1. sql解析模块功能说明

mycat作为一个分布式数据库中间件,其sql解析主要有以下作用:

(1) 判断sql语法是否正确

sql解析模块的一个重要功能就是判断sql是否符合语法要求。因为后端数据库默认对接mysql,所以在sql解析模块默认判断是否符合mysql语法。

(2) sql语句分类并对不同类型的sql语句做不同的逻辑处理

不同的逻辑处理包括决定sql语句是否被支持、sql拦截、sql缓存等。

mycat作为一款中间件,并非所有的mysql语法都支持,因此,对于一些特殊的不支持语法,在sql解析模块解析通过之后需要进行额外的判断, 然后直接返回响应(不支持此语法)给客户端。

(3) 为sql路由模块处理提供服务

sql路由模块是实现mycat分库分表的关键,而sql解析模块是sql路由模块实现的关键。sql路由依赖sql解析结果。举例说明,假设表customer按主键id取模分到2个节点上,其中id % 2 == 0位于dn1, id % 2 == 1 位于dn2,那么对于下面的语句:

select * from customer where id = 1;

经过sql解析模块可以得到where条件id = 1, 在sql路由模块中我们判断到id是分片字段,结合这个表的路由规则判断该语句可以直接发送到dn2。

(4) 为sql结果集后处理模块提供服务

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值