欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

基于简单sql语句的sql解析原理及在大数据中的应用

程序员文章站 2022-04-28 11:05:55
...

基于简单sql语句的sql解析原理及在大数据中的应用 李万鸿 通常sql语法解析都是以lex、yacc进行分析为基础的,是逐个字符进行分析,性能不高,如果基于没有子查询的sql语句进行解析,则速度会提高许多,在此对其原理加以说明。 一般sql语句十分复杂,包含多层

基于简单sql语句的sql解析原理及在大数据中的应用

李万鸿

通常sql语法解析都是以lex、yacc进行分析为基础的,是逐个字符进行分析,性能不高,如果基于没有子查询的sql语句进行解析,则速度会提高许多,在此对其原理加以说明。

一般sql语句十分复杂,包含多层嵌套,但其中有规律可循,其特点是所有的语句基本模式是一样的,即:都是SELECT FROM WHERE类型的简单语句,因此,可以把嵌套的语句逐条解析为这种简单语句。由于sql语句的语法是一样的,所以可以用递归的方法对语句加以解析,从而把sql语句解析为多条简单的子SQL语句。然后通过一个方法分别解析这些子sql语句。这样处理,算法简单有效,极大地提高性能,对于SQL语法解析来说是一个革命性的新思路。

大数据通常使用HBASE等NOSQL,对于sql开发来说极为不便,为此,采用分布式的关系数据库来保存大数据极具实用价值,比如用ORACLE、MYSQL把一张表分库保存到多个数据库,这样既可以处理海量数据又适用于传统的编程,支持MYBATIS、SPRING、HIBERNATE,开发极为方便。相应的难点是各个分库的表的ID的唯一性和SQL语句的处理。

对于ID的唯一性解决不难,关键在于分布式SQL的处理。随着SPARK等大数据软件应运而生,对于分布式数据的处理来说正当其时。可以用SPARK来处理分布的数据,那么如何得到这些数据呢?为此,可以通过本文提出的SQL解析原理对SQL语句进行解析,把一条复杂的SQL语句解析为多简单的SQL语句,如 SELECT A.*FORM USER A WHERE A.ID>222,然后通过数据字典找到USER表对应的分库,在各个分库上执行查询,然后把各个查询结果用SPARK处理,对于其他的子SQL语句如法炮制,然后根据主SQL语句的条件如JOIN、GROUP BY、ORDER BY等对所有的查询数据进行运算汇总处理,最后返回结果。

总之,通过获取各个简单的子SQL语句进行语法解析或语句分解,是一个行之有效的好办法,简单巧妙地解决了一个公共的难题,尤其对于采用高效数据库处理大数据有特殊的意义,为其奠定了基石。这是一个极为有效的解决办法,值得应用。

2014-10-17