專利名稱::一種sql語句處理方法及裝置的制作方法
技術領域:
:本發明涉及數據庫
技術領域:
,尤其涉及ー種SQL語句處理方法及裝置。
背景技術:
:MySQL是ー種關聯數據庫管理系統,其使用的SQL(StructuredQueryLanguage,結構化查詢語言)是用于訪問數據庫的最常用標準化語言。在現有的MySQL技術中,MySQLProxy是ー個處于客戶端和MySQL服務器端之間的一個應用程序,作為中間層代理,負責將前臺應用客戶端的連接請求轉發給后臺的數據庫,并且通過使用Iua腳本,可以實現復雜的連接控制和過濾,從而實現讀寫分離和負載平衡。對于應用客戶端來說,MySQLProxy是完全透明的,應用客戶端則只需要連接到MySQLProxy的監聽端ロ即可。隨著對于海量數據存儲和查詢的需要,現有技術中出現了公有云計算的分布式數據庫集群技術,在實際應用中,經常會有大量應用客戶端向數據庫集群請求進行一些數據庫處理操作,而且,其中還可能包括ー些不良的,甚至是惡意的請求操作,導致數據庫集群的整體負載較高,降低了進行數據庫處理操作的效率,并影響了對其他客戶端的正常請求的處理。然而,將MySQLProxy引入到數據庫集群技術中,也僅是能實現連接控制、讀寫分離和負載平衡等,而無法對請求進行數據庫處理操作的SQL語句的安全性進行判定,以提高數據庫的運行性能。
發明內容本發明實施例提供ー種SQL語句處理方法及裝置,用以解決現有技術中存在的數據庫運行性能較低問題。本發明實施例提供ー種SQL語句處理方法,包括獲取請求進行數據庫處理操作的SQL語句;對所述SQL語句進行結構分析,得到分析結果;根據所述分析結果,確定按照所述SQL語句進行數據庫處理操作時所表征的基準行數,所述基準行數為進行數據庫處理操作時需要查詢的數據行數;當確定的所述基準行數小于行數閾值時,確定按照所述SQL語句進行數據庫處理操作,否則,確定取消按照所述SQL語句進行數據庫處理操作。本發明實施例還提供一種結構化查詢語言SQL語句處理裝置,包括獲取單元,用于獲取請求進行數據庫處理操作的SQL語句;分析単元,用于對所述SQL語句進行結構分析,得到分析結果;第一確定單元,用于根據所述分析結果,確定按照所述SQL語句進行數據庫處理操作時所表征的基準行數,所述基準行數為進行數據庫處理操作時需要查詢的數據行數;第二確定單元,用于當確定的所述基準行數小于行數閾值時,確定按照所述SQL語句進行數據庫處理操作,否則,確定取消按照所述SQL語句進行數據庫處理操作。本發明有益效果包括本發明實施例提供的方法中,對于請求進行數據庫處理操作的SQL語句,根據對該SQL語句進行結構分析的分析結果,確定按照該SQL語句進行數據庫處理操作時所表征的基準行數,并當確定的基準行數小于行數閾值時,確定按照該SQL語句進行數據庫處理操作,否則,確定取消按照所述SQL語句進行數據庫處理操作。由于該基準行數為進行數據庫處理操作時需要查詢的數據行數,即能夠表征按照該SQL語句進行數據庫處理操作時對數據庫負載的影響,所以當該基準行數小于行數閾值時,表示該SQL語句不會引起數據庫系統負載的較大增長,確定按照該SQL語句進行數據庫處理操作,否則,即當該基準行數不小于行數閾值時,表示該SQL語句會引起數據庫系統負載的較大增長,確定取消按照該SQL語句進行數據庫處理操作,因此能夠有效過濾掉導致數據庫負載較大的SQL語句,從而提高了數據庫運行性能。附圖用來提供對本發明的進ー步理解,并且構成說明書的一部分,與本發明實施例一起用于解釋本發明,并不構成對本發明的限制。在附圖中圖I為本發明實施例提供的SQL語句處理方法的流程圖;圖2為本發明實施例I提供的SQL語句處理方法的流程圖;圖3為本發明實施例2提供的SQL語句處理方法的流程圖;圖4為本發明實施例3提供的SQL語句處理裝置的結構示意圖。具體實施例方式為了給出提高數據庫運行性能的實現方案,本發明實施例提供了ー種SQL語句處理方法及裝置,以下結合說明書附圖對本發明的優選實施例進行說明,應當理解,此處所描述的優選實施例僅用于說明和解釋本發明,并不用于限定本發明。并且在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。本發明實施例提供ー種SQL語句處理方法,如圖I所示,包括步驟101、獲取請求進行數據庫處理操作的SQL語句。步驟102、對該SQL語句進行結構分析,得到分析結果。步驟103、根據分析結果,確定按照該SQL語句進行數據庫處理操作時所表征的基準行數,基準行數為進行數據庫處理操作時需要查詢的數據行數。步驟104、當確定的基準行數小于行數閾值時,確定按照該SQL語句進行數據庫處理操作,否則,確定取消按照該SQL語句進行數據庫處理操作。進ー步的,在執行步驟102之前,可以判斷該SQL語句的類型,并針對指定類型的SQL語句進入后續的分析處理,指定類型可以根據實際需要進行設置,例如,將可能導致數據庫負載較大增長的SQL語句的類型設置為指定類型,具體可以包括選擇類型(select)、更新類型(update)、刪除類型(delete)、創建索引類型(createindex)和修改表結構類型(altertable)。進ー步的,在上述步驟102中對該SQL語句進行結構分析時,具體可以根據該SQL語句的類型,按照與其類型對應的分析方式,對該SQL語句進行結構分析;也可以當該SQL語句為選擇類型語句時,按照與選擇類型語句對應的分析方式,對該SQL語句進行結構分析,當該SQL語句非選擇類型語句時,將該SQL語句轉換為選擇類型語句,按照與選擇類型語句對應的分析方式,對轉換后的SQL語句進行結構分析。其中,由于在實現時,相比對各種類型的SQL語句的分析,對SQL語句的類型轉換更容易,所以,采用第二種方式將SQL語句轉換為統一的選擇類型語句,再進行結構分析,能夠提高本方案的處理效率。進一步的,本發明實施例中針對上述步驟103和步驟104的處理,也提出了更詳細的處理流程,下面結合附圖,用具體實施例對本發明提供的方法及裝置進行詳細描述。實施例I:圖2所示為本發明實施例I提供的SQL語句處理方法的流程圖,具體包括如下處理步驟步驟201、獲取請求進行數據庫處理操作的SQL語句。該SQL語句可以為應用客戶端向數據庫系統發送的用于請求進行數據庫處理操作的SQL語句,本發明實施例I中,在該SQL語句到達數據庫系統,并按照該SQL語句進行相應處理操作之前,可以先獲取該SQL語句,并按照后續的處理流程對其進行處理,以判定該SQL語句是否會引起數據庫系統負載的較大增長,從而確定是否按照該SQL語句進行數據庫處理操作。其中,該數據庫系統可以為公有云計算的分布式數據庫集群,可以為其它類型的數據庫系統。步驟202、確定該SQL語句是否為指定類型的SQL語句,如果不是,進入步驟203,如果是,進入步驟204。其中,指定類型可以根據實際需要進行設置,例如,將可能導致數據庫負載較大的SQL語句的類型設置為指定類型,具體可以包括選擇類型(select)、更新類型(update)、刪除類型(delete)、創建索引類型(createindex)和修改表結構類型(altertable)。步驟203、當該SQL語句不是指定類型的SQL語句時,或者,從后續的步驟212進入本步驟,即當該SQL語句進行數據庫處理操作時所表征的基準行數小于行數閾值時,表示該SQL語句不會引起數據庫系統負載的較大增長,所以確定按照該SQL語句進行數據庫處理操作,具體可以將該SQL語句轉發至數據庫系統,由數據庫系統按照該SQL語句進行相應的處理操作。步驟204、當該SQL語句是指定類型的SQL語句時,表示該SQL語句可能會引起數據庫系統負載的較大增長,所以需要通過對其進行結構分析,以便作進一步的判定。本步驟中,首先確定該SQL語句是否為選擇類型語句,如果不是,進入步驟205,如果是,進入步驟206。步驟205、將該SQL語句轉換為選擇類型語句。具體可以基于該非選擇類型的SQL語句中用于表征類型的類型標記,確定該SQL語句的類型,并根據該SQL語句的類型,從該SQL語句中提取對應的內容信息,并基于所提取的內容信息生成該SQL語句對應的轉換后的選擇類型的SQL語句。例如,針對更新類型的SQL語句在進行轉換時,提取的內容信息可以包括別名、表名和條件(where)語句;針對刪除類型的SQL語句在進行轉換時,提取的內容信息可以包括標識、表名和條件語句;針對創建索引類型的SQL語句在進行轉換時,提取的內容信息可以包括表名;針對修改表結構類型的SQL語句在進行轉換時,提取的內容信息可以包括表名。步驟206、針對由上述步驟204中確定的為選擇類型的SQL語句,以及上述步驟205中經過轉換后的為選擇類型的SQL語句,本步驟中,按照與選擇類型語句對應的分析方式,對該SQL語句進行結構分析,并得到分析結果。具體的,可以通過對該SQL語句進行結構分析,確定該SQL語句包括的各子語句塊的類型,以及包括的各子語句塊表征的基準行數,以及該SQL語句中是否包括限制(limit)參數,即該SQL語句最外層是否附帶了限制參數,以及該SQL語句中是否包括外排序參數,即該SQL語句最外層是否附帶了外排序參數,以及該SQL語句中是否包括索引參數。下面對分析結果中SQL語句包括的各子語句塊的類型和表征的基準行數舉例描述如下表I所示為該SQL語句包括的各子語句塊的第一種情況。表I權利要求1.一種結構化查詢語言SQL語句處理方法,其特征在于,包括獲取請求進行數據庫處理操作的SQL語句;對所述SQL語句進行結構分析,得到分析結果;根據所述分析結果,確定按照所述SQL語句進行數據庫處理操作時所表征的基準行數,所述基準行數為進行數據庫處理操作時需要查詢的數據行數;當確定的所述基準行數小于行數閾值時,確定按照所述SQL語句進行數據庫處理操作,否則,確定取消按照所述SQL語句進行數據庫處理操作。2.如權利要求I所述的方法,其特征在于,在對所述SQL語句進行結構分析之前,還包括確定所述SQL語句為指定類型的SQL語句。3.如權利要求I所述的方法,其特征在干,對所述SQL語句進行結構分析,具體包括當所述SQL語句為選擇類型語句吋,按照與選擇類型語句對應的分析方式,對所述SQL語句進行結構分析;當所述SQL語句為非選擇類型語句時,將所述SQL語句轉換為選擇類型語句,按照與選擇類型語句對應的分析方式,對轉換后的SQL語句進行結構分析。4.如權利要求I所述的方法,其特征在干,對所述SQL語句進行結構分析,得到分析結果,具體包括對所述SQL語句進行結構分析,確定所述SQL語句包括的各子語句塊的類型,以及所述各子語句塊表征的基準行數,以及所述SQL語句中是否包括限制參數,以及所述SQL語句中是否包括外排序參數,以及所述SQL語句中是否包括索引參數。5.如權利要求4所述的方法,其特征在于,根據所述分析結果,確定按照所述SQL語句進行數據庫處理操作時所表征的基準行數,具體包括按照所述SQL語句所包括的各子語句塊從前到后的順序,對所述各子語句塊進行分組,其中,每個分組中的第一個子語句塊的類型為簡單類型或者原始類型,且每個分組中除第一個子語句塊外不包括簡單類型和原始類型的子語句塊;針對每個分組包括的各子語句塊的類型和表征的基準行數,采用如下步驟確定該分組表征的基準行數按照該分組包括的各子語句塊的先后順序,從該分組中第二個子語句塊開始,依次確定每個子語句塊對應的中間基準行數,并將該分組中最后一個子語句塊對應的中間基準行數作為該分組表征的基準行數,其中,當子語句塊的類型為聯合類型或依賴聯合類型時,該子語句塊對應的中間基準行數為前ー個子語句塊對應的中間基準行數和該子語句塊表征的基準行數的乘積,當子語句塊的類型為子查詢類型、依賴子查詢類型或派生類型時,該子語句塊對應的中間基準行數為前ー個子語句塊對應的中間基準行數和該子語句塊表征的基準行數中的最小值,該分組中的第一個子語句塊對應的中間基準行數為第一個子語句塊表征的基準行數;確定各分組表征的基準行數的和值;根據所述SQL語句中是否包括限制參數,以及是否包括外排序參數,對所述和值進行加減修正,得到第一修正值;根據所述SQL語句中是否包括索引參數,對所述第一修正值進行倍數修正,得到所述SQL語句進行數據庫處理操作時所表征的基準行數。6.如權利要求4所述的方法,其特征在于,在確定按照所述SQL語句進行數據庫處理操作時所表征的基準行數之前,還包括確定所述SQL語句中不包括限制參數,以及所述SQL語句中包括外排序參數。7.如權利要求6所述的方法,其特征在于,根據所述分析結果,確定按照所述SQL語句進行數據庫處理操作時所表征的基準行數,具體包括按照所述SQL語句所包括的各子語句塊從前到后的順序,對所述各子語句塊進行分組,其中,每個分組中的第一個子語句塊的類型為簡單類型或者原始類型,且每個分組中除第一個子語句塊外不包括簡單類型和原始類型的子語句塊;針對每個分組包括的各子語句塊的類型和表征的基準行數,采用如下步驟確定該分組表征的基準行數按照該分組包括的各子語句塊的先后順序,從該分組中第二個子語句塊開始,依次確定每個子語句塊對應的中間基準行數,并將該分組中最后一個子語句塊對應的中間基準行數作為該分組表征的基準行數,其中,當子語句塊的類型為聯合類型或依賴聯合類型時,該子語句塊對應的中間基準行數為前ー個子語句塊對應的中間基準行數和該子語句塊表征的基準行數的乘積,當子語句塊的類型為子查詢類型、依賴子查詢類型或派生類型時,該子語句塊對應的中間基準行數為前ー個子語句塊對應的中間基準行數和該子語句塊表征的基準行數中的最小值,該分組中的第一個子語句塊對應的中間基準行數為第一個子語句塊表征的基準行數;確定各分組表征的基準行數的和值;根據所述SQL語句中是否包括索引參數,對所述和值進行倍數修正,得到所述SQL語句進行數據庫處理操作時所表征的基準行數。8.一種結構化查詢語言SQL語句處理裝置,其特征在于,包括獲取單元,用于獲取請求進行數據庫處理操作的SQL語句;分析単元,用于對所述SQL語句進行結構分析,得到分析結果;第一確定單元,用于根據所述分析結果,確定按照所述SQL語句進行數據庫處理操作時所表征的基準行數,所述基準行數為進行數據庫處理操作時需要查詢的數據行數;第二確定單元,用于當確定的所述基準行數小于行數閾值時,確定按照所述SQL語句進行數據庫處理操作,否則,確定取消按照所述SQL語句進行數據庫處理操作。9.如權利要求8所述的裝置,其特征在于,所述分析単元,還用于在對所述SQL語句進行分析之前,確定所述SQL語句為指定類型的SQL語句。10.如權利要求8所述的裝置,其特征在于,所述分析単元,具體用于當所述SQL語句為選擇類型語句時,按照與選擇類型語句對應的分析方式,對所述SQL語句進行結構分析;以及當所述SQL語句為非選擇類型語句時,將所述SQL語句轉換為選擇類型語句,按照與選擇類型語句對應的分析方式,對轉換后的SQL語句進行結構分析。11.如權利要求8所述的裝置,其特征在干,所述分析単元,具體用于對所述SQL語句進行結構分析,確定所述SQL語句包括的各子語句塊的類型,以及所述各子語句塊表征的基準行數,以及所述SQL語句中是否包括限制參數,以及所述SQL語句中是否包括外排序參數,以及所述SQL語句中是否包括索引參數。12.如權利要求11所述的裝置,其特征在于,所述第一確定單元,具體用于按照所述SQL語句所包括的各子語句塊從前到后的順序,對所述各子語句塊進行分組,其中,每個分組中的第一個子語句塊的類型為簡單類型或者原始類型,且每個分組中除第一個子語句塊外不包括簡單類型和原始類型的子語句塊;并針對每個分組包括的各子語句塊的類型和表征的基準行數,采用如下步驟確定該分組表征的基準行數按照該分組包括的各子語句塊的先后順序,從該分組中第二個子語句塊開始,依次確定每個子語句塊對應的中間基準行數,并將該分組中最后一個子語句塊對應的中間基準行數作為該分組表征的基準行數,其中,當子語句塊的類型為聯合類型或依賴聯合類型時,該子語句塊對應的中間基準行數為前ー個子語句塊對應的中間基準行數和該子語句塊表征的基準行數的乘積,當子語句塊的類型為子查詢類型、依賴子查詢類型或派生類型時,該子語句塊對應的中間基準行數為前ー個子語句塊對應的中間基準行數和該子語句塊表征的基準行數中的最小值,該分組中的第一個子語句塊對應的中間基準行數為第一個子語句塊表征的基準行數;確定各分組表征的基準行數的和值;并根據所述SQL語句中是否包括限制參數,以及是否包括外排序參數,對所述和值進行加減修正,得到第一修正值;以及根據所述SQL語句中是否包括索引參數,對所述第一修正值進行倍數修正,得到所述SQL語句進行數據庫處理操作時所表征的基準行數。13.如權利要求11所述的裝置,其特征在于,所述第一確定單元,還用于在確定按照所述SQL語句進行數據庫處理操作時所表征的基準行數之前,確定所述SQL語句中不包括限制參數,以及所述SQL語句中包括外排序參數。14.如權利要求13所述的裝置,其特征在干,所述第一確定單元,具體用于按照所述SQL語句所包括的各子語句塊從前到后的順序,對所述各子語句塊進行分組,其中,每個分組中的第一個子語句塊的類型為簡單類型或者原始類型,且每個分組中除第一個子語句塊外不包括簡單類型和原始類型的子語句塊;并針對每個分組包括的各子語句塊的類型和表征的基準行數,采用如下步驟確定該分組表征的基準行數按照該分組包括的各子語句塊的先后順序,從該分組中第二個子語句塊開始,依次確定每個子語句塊對應的中間基準行數,并將該分組中最后一個子語句塊對應的中間基準行數作為該分組表征的基準行數,其中,當子語句塊的類型為聯合類型或依賴聯合類型時,該子語句塊對應的中間基準行數為前ー個子語句塊對應的中間基準行數和該子語句塊表征的基準行數的乘積,當子語句塊的類型為子查詢類型、依賴子查詢類型或派生類型時,該子語句塊對應的中間基準行數為前ー個子語句塊對應的中間基準行數和該子語句塊表征的基準行數中的最小值,該分組中的第一個子語句塊對應的中間基準行數為第一個子語句塊表征的基準行數;確定各分組表征的基準行數的和值;井根據所述SQL語句中是否包括索引參數,對所述和值進行倍數修正,得到所述SQL語句進行數據庫處理操作時所表征的基準行數。全文摘要本發明公開了一種SQL語句處理方法及裝置,包括獲取請求進行數據庫處理操作的SQL語句;并對該SQL語句進行結構分析,得到分析結果;并根據分析結果,確定按照該SQL語句進行數據庫處理操作時所表征的基準行數,基準行數為進行數據庫處理操作時需要查詢的數據行數;以及當確定的基準行數小于行數閾值時,確定按照該SQL語句進行數據庫處理操作,否則,確定取消按照該SQL語句進行數據庫處理操作。采用本發明實施例提供的方案,提高了數據庫運行性能。文檔編號G06F17/30GK102915344SQ201210361178公開日2013年2月6日申請日期2012年9月25日優先權日2012年9月25日發明者叢磊,王利俊,鄭志勇申請人:新浪網技術(中國)有限公司