tiDB的sqlParse适不适用于大量并发请求中解析语句生成语法树

【 TiDB 使用环境】
使用TiDB的sqlParser解析sql语句,用于业务场景解析查询请求

【概述】
在业务中需要解析sql语句并转换为某种查询,但TiDB的sqlParser是比较重的,并且协程不安全,高并发场景用池子或者单个Parser可否支持,单个Parser能否支持并发查询

sql字符串到AST一般有两个过程。
词法解析(将sql语句中每一个元素解析成不同类别的token,可能是关键字,用户变量,操作符),
语法解析(匹配sql句式,将前一阶段解析出的token方法对应句式中的各个位置)

这两个过程英文叫法 lex & yacc。

tidb 的 parser 由go语言编写。语法解析用的goYacc,词法没有成熟的go实现。所以自己实现,主要代码在parser项目的lexer.go文件中。

对于并发的支持,我在parser源码中没看到关于协程的操作。并发是由TiDB控制的,parser只是单纯的做sql解析罢。

单独使用作为其他项目的sql解析器没试过,可以试试。

2赞