我的编程空间,编程开发者的网络收藏夹
学习永远不晚

分布式 | DBLE 之 SQL 解析

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

分布式 | DBLE 之 SQL 解析

分布式 | DBLE 之 SQL 解析


数据库中间件与数据库有什么区别?

个人认为除了没做数据存储,其他的功能数据库中间件几乎一样不少,比如 SQL 解析、结果集处理、协议实现等。

SQL 解析的定义

今天我们主要来谈谈 SQL 解析,SQL 的全称为 Structured Query Language,即结构化查询语言,既然定义为语言,那其实它和任何其他语言都是平等的。所以对 SQL 的解析完全等同于对任何一门语言的解析,对编程语言的解析这就涉及到编译原理相关知识了。

想要解析一门语言,通常需要具备以下工具:

  • 词法分析器(Lexer):负责解析基本的词法,也就是将字符序列转换为单词(Token)序列的过程。
  • 语法分析器(Parser):将词法分析器解析出的单词(Token)序列,进一步构建成有语义的数据结构,比如抽象语法树。
  • 访问器(Visitor):能够对语法分析器生成的抽象语法树进行遍历,获取需要的信息。

上面的定义可能大家看完还有点懵懂,这里我通过一个实际的例子来让大家有个更具体的认识。

案例解析

原始 SQL 如下:

SELECT id, name FROM test WHERE ID > 2 LIMIT 2;

下面我们来解析这个 SQL:

1. 词法分析

词法分析是将字符序列转换为单词(Token)序列的过程,所以上面的 SQL 经过词法分析后,将会变成这样一串序列:

是的,大家也许看出来了,词法分析就是拆分字符序列(是的,没错,我们都能自己写个词法分析器)。

2. 语法分析

语法分析是将词法分析器解析出的单词(Token)序列,进一步构建成有语义的抽象语法树(为什么是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节,比如上面拆分出来的“,”就不需要再数据结构中展现了)。

经过语法分析,上述序列将呈现如下结构:

同学们看到这里,应该知道语法分析器的作用了吧,其实就是把单词(TOKEN)序列转换成相应的数据结构,因为是树形的,又是“抽象”的,所以就叫抽象语法树了,看起来高端,其实大家也能自己写个语法分析器。

完成了上面两步,SQL 语法解析就已经完成了,至于遍历器,其实就是访问抽象语法树中的结构的。

总结

对于 SQL 解析,难道我们真的要手写吗?答案是当然不用啦,毕竟我们不是第一个吃螃蟹的人,DRUID 已经帮我们实现了 SQL 解析的功能,所以我们可以直接拿来用。DRUID 中的词法分析器以及语法分析器都是纯手写的,效率也很快。这里同学们可能会问,难道还有不用手写的吗?答案是肯定的,ANLTR 就可以帮你生成相应的解析器,不过还是需要你定义规则的。

DBLE 中 SQL 解析用的是 DRUID 实现,其实 SQL 解析说白了就是理解 SQL,理解了 SQL 就知道它要干嘛了,所以 DBLE 中的 SQL 解析是为后面的路由、结果集处理等功能服务的。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

分布式 | DBLE 之 SQL 解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

分布式 | DBLE 之 SQL 解析

数据库中间件与数据库有什么区别?个人认为除了没做数据存储,其他的功能数据库中间件几乎一样不少,比如 SQL 解析、结果集处理、协议实现等。SQL 解析的定义今天我们主要来谈谈 SQL 解析,SQL 的全称为 Structured Query Language,
分布式 | DBLE 之 SQL 解析
2020-12-15

分布式 | DBLE LOAD DATA 功能实现解析

1.概述本篇文章主要介绍 DBLE LOAD DATA 大规模数据导入功能的实现,包括方案设计、源码解读。下面就让我们一起来探秘 DBLE 是如何实现该功能的吧!2.方案设计LOAD DATA 为 MySQL 提供的从文本文件导入数据到表的语法,作为数据库中间
分布式 | DBLE LOAD DATA 功能实现解析
2019-03-17

分布式 | DBLE 心跳检测模块解析

概述本文主要介绍 DBLE 心跳检测模块,内容包括心跳检测作用及心跳检测模块源码解析两部分。心跳检测作用DBLE 中心跳检测的作用有以下三点:1.控制多个写节点高可用切换;2.控制读操作的负载均衡,会根据最近一次的心跳状态,及主从延迟(如果配置了 slaveT
分布式 | DBLE 心跳检测模块解析
2021-04-10

分布式 | DBLE Release Notes 详细解读 2.19.11.0

以下对 DBLE 2.19.11.0 Release Notes 的进行详细解读,文章主要分为以下四部分内容:一、DBLE 项目介绍二、新版本概况二、主要更新解读三、完整 Release Notes一、DBLE 项目介绍DBLE — 企业级开源分布式中间件,江
分布式 | DBLE Release Notes 详细解读 2.19.11.0
2017-09-06

分布式 | DBLE 新全局表检查实现浅析

作者:孙正方爱可生 DBLE 核心研发成员,拥有丰富的分布式数据库中间件开发、咨询以及调优经验,擅长数据库中间件问题排查和处理,对线上中间件部分排错有深入的实践与认知。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来
分布式 | DBLE 新全局表检查实现浅析
2022-03-26

分布式 | dble 中分布式时间戳方式的全局序列

作者:吴金玲爱可生 dble 项目团队成员,主要负责 dble 相关的日常测试工作,擅长对 dble 中出现的问题进行排查。热爱测试工作,余生欲将测试工作进行到底。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
分布式 | dble 中分布式时间戳方式的全局序列
2020-11-16

分布式 | DBLE 是如何实现视图的?

作者:苏仕祥浩鲸科技 PaaS 组件团队成员,长期从事分库分表中间件的相关解决方案工作,热爱技术,乐于分享。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文主要讲解 DBLE 是如何实现 MySQL 视图功能
分布式 | DBLE 是如何实现视图的?
2014-11-17

分布式 | ddl 失败在 dble 中排查过程

作者:冒飞爱可生 dble 项目测试组成员,负责 dble 相关测试工作,拥有多年数据库中间件测试经验,擅长故障排查及性能调优。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。思考一个问题:当我们用 dble 执
分布式 | ddl 失败在 dble 中排查过程
2015-06-19

Redisson分布式锁之加解锁源码分析

这篇文章主要介绍“Redisson分布式锁之加解锁源码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redisson分布式锁之加解锁源码分析”文章能帮助大家解决问题。锁的可重入性我们都知道,Ja
2023-07-05

LINQ TO SQL分布式事务举例分析

本篇内容介绍了“LINQ TO SQL分布式事务举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!LINQ TO SQL,顾名思义,涉及
2023-06-17

深入理解:分布式之抉择分布式锁

前言:目前网上大部分的基于zookpeer,和redis的分布式锁的文章都不够全面。要么就是特意避开集群的情况,要么就是考虑不全,读者看着还是一脸迷茫。坦白说,这种老题材,很难写出新创意,博主内心战战兢兢,如履薄冰,文中有什么不严谨之处,欢
2023-06-05

Java面试题之分布式的示例分析

这篇文章主要为大家展示了“Java面试题之分布式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java面试题之分布式的示例分析”这篇文章吧。面试题1:说说什么分布式事务?解释一下什么是
2023-06-20

Redisson分布式锁之加解锁详解

目录引言锁的可重入性加锁锁续命释放锁引言2023的金三银四来的没想象中那么激烈,一个朋友前段时间投了几十家,多数石沉大海,好不容易等来面试机会,就恰好被问道项目中关于分布式锁的应用,后涉及Redisson实现分布式锁的原理,答不上来。锁的
2023-03-19

Redis分布式锁实例分析讲解

目录1 一人一单并发安全问题2 分布式锁的原理和实现2.1 什么是分布式锁2.2 分布式锁的实现1 一人一单并发安全问题之前一人一单的业务使用的悲观锁,在分布式系统下,是无法生效的。理想的情况下是这样的:一个线程成功获取互斥锁,并对查询
2022-12-06

MySQL之SQL语法及SQL解析顺序源码分析

这篇“MySQL之SQL语法及SQL解析顺序源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL之SQL语法及S
2023-04-06

分布式Netty源码分析

这篇文章主要介绍了分布式Netty源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇分布式Netty源码分析文章都会有所收获,下面我们一起来看看吧。服务器端demo看下一个简单的Netty服务器端的例子pu
2023-06-29

redis分布式锁与zk分布式锁的对比分析

目录Redis实现分布式锁原理能实现的锁类型注意事项 zk实现分布式锁原理能实现的锁类型两种锁的对比在分布式环境下,传统的jvm级别的锁会失效,那么分布式锁就是非常有必要的一个技术,一般我们可以通过redis,zk等技术来实现我们的分布式锁
2022-11-18

编程热搜

目录