基於簡單sql語句的sql解析原理及在大資料中的應用

來源:互聯網
上載者:User

標籤: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

 

 

 

基於簡單sql語句的sql解析原理及在大資料中的應用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.