一種基于云計算的sql語句處理系統(tǒng)的制作方法【專利摘要】本發(fā)明公開了一種基于云計算的SQL語句處理系統(tǒng),包括編譯解析器,用于將接收到的SQL語句或存儲過程的文本轉(zhuǎn)換為對應的原子對象;合并優(yōu)化器,用于遍歷每個SQL語句的原子對象,將具有相同內(nèi)容的原子對象提取出來作為一個公用的原子對象;執(zhí)行監(jiān)控器,用于接收合并優(yōu)化器處理后的原子對象,為每個原子對象分配獨立的可執(zhí)行組件,并由可執(zhí)行組件的運行獲取計算結(jié)果;數(shù)據(jù)適配器,數(shù)據(jù)適配器包括數(shù)據(jù)輸入適配器和數(shù)據(jù)輸出適配器,數(shù)據(jù)輸入適配器用于從不同的數(shù)據(jù)源讀取數(shù)據(jù),并傳遞至編譯解析器;數(shù)據(jù)輸出適配器用于將執(zhí)行監(jiān)控器生成的計算結(jié)果寫入至對應的數(shù)據(jù)源中。本發(fā)明提高了SQL語句處理速度,優(yōu)化CPU和內(nèi)存,降低流量消耗。【專利說明】—種基于云計算的SQL語句處理系統(tǒng)【
技術領域:
】[0001]本發(fā)明涉及數(shù)據(jù)庫處理領域,特別是一種基于云計算的SQL語句處理系統(tǒng)。【
背景技術:
】[0002]目前支持云計算的sql語句系統(tǒng)中,對于同時批量提交2條以上的查詢SQL語句,每條SQL語句都是單獨執(zhí)行,沒有對SQL語句里面相同表達式和語句進行共享合并操作,導致多條SQL語句同時執(zhí)行的情況下,系統(tǒng)的內(nèi)存和CPU等占用急劇變大,運行的速度比單條SQL順序執(zhí)行時還要慢,有些系統(tǒng)則直接導致內(nèi)存不足等現(xiàn)象,導致任務執(zhí)行失敗?!?br/>發(fā)明內(nèi)容】[0003]為解決上述問題,本發(fā)明的目的在于提供一種基于云計算的SQL語句處理系統(tǒng),優(yōu)化SQL語句的并行與串行操作,降低SQL語句處理時的內(nèi)存與CPU消耗,提升SQL語句處理效率。[0004]本發(fā)明解決其問題所采用的技術方案是:一種基于云計算的SQL語句處理系統(tǒng),包括:編譯解析器,用于將接收到的SQL語句或存儲過程的文本轉(zhuǎn)換為對應的原子對象;合并優(yōu)化器,用于遍歷每個SQL語句的原子對象,將具有相同內(nèi)容的原子對象提取出來作為一個公用的原子對象;執(zhí)行監(jiān)控器,用于接收合并優(yōu)化器處理后的原子對象,為每個原子對象分配獨立的可執(zhí)行組件,并由可執(zhí)行組件的運行獲取計算結(jié)果。[0005]進一步,還包括數(shù)據(jù)適配器,所述數(shù)據(jù)適配器包括數(shù)據(jù)輸入適配器和數(shù)據(jù)輸出適配器,其中:所述數(shù)據(jù)輸入適配器用于從不同的數(shù)據(jù)源讀取數(shù)據(jù),并傳遞至編譯解析器;所述數(shù)據(jù)輸出適配器用于將執(zhí)行監(jiān)控器生成的計算結(jié)果寫入至對應的數(shù)據(jù)源中。[0006]進一步,所述存儲過程的文本為SQL語句文本。[0007]進一步,所述編譯解析器包括:語法判斷單元,用于判斷對應的SQL語句是否符合語法規(guī)定;解析單元,用于將符合語法規(guī)定的SQL語句分割為對應字段表達式和/或條件表達式;語法分析對象單元,用于將字段表達式和/或條件表達式轉(zhuǎn)換成語法樹;原子對象單元,用于將語法樹里面的對象進一步分解為最小粒度的原子對象,所述最小粒度的原子對象包括字段、表名、函數(shù)和分組對象。[0008]進一步,所述最小粒度的原子對象被保存至一個hashmap對象中,且不同的原子對象,都具有唯一的⑶ID編號。[0009]進一步,所述合并優(yōu)化器在提取公用的原子對象時,若原子對象的父親節(jié)點是一個表達式對象,且所有原子對象的表達式對象內(nèi)容相同,則提取該表達式對象作為公用的表達式對象,所述提取的公用的原子對象、表達式對象均被存入至公共內(nèi)存池中。[0010]進一步,所述執(zhí)行監(jiān)控器包括:執(zhí)行器,用于為為每個原子對象分配獨立的可執(zhí)行組件,每個組件分別在執(zhí)行器中獨立執(zhí)行;監(jiān)控器,用于記錄每個可執(zhí)行組件的開始時間、結(jié)束時間、占用CPU和內(nèi)存及耗費網(wǎng)絡流量參數(shù),以優(yōu)化可執(zhí)行組件的串行與并行,獲取本次計算中的關鍵路徑和最優(yōu)模型。[0011]本發(fā)明的有益效果是:本發(fā)明采用一種基于云計算的SQL語句處理系統(tǒng),將SQL語句首先分割為原子對象,再對原子對象進行合并優(yōu)化,提取出公用的原子對象或表達式對象,為每個原子或表達式對象分配單獨的可執(zhí)行組件,并監(jiān)控執(zhí)行過程,根據(jù)監(jiān)控的每個可執(zhí)行組件的開始時間、結(jié)束時間、占用CPU和內(nèi)存及耗費網(wǎng)絡流量等參數(shù),確定哪些組件可以并行運行,哪些組件必須串行運行,并依此計算本次任務中的關鍵路徑和最優(yōu)模型,以便對系統(tǒng)性能等進行優(yōu)化。本發(fā)明在分割原子對象時,每個原子對象均有唯一的GUID編號,方便記錄及后續(xù)的合并優(yōu)化;公共內(nèi)存池中存儲的不僅是原子對象,亦可以是原子對象的父親節(jié)點——表達式對象,實現(xiàn)了大對象的共享功能;根據(jù)監(jiān)控的開始時間、結(jié)束時間、占用CPU和內(nèi)存及耗費網(wǎng)絡流量等參數(shù),及時判斷哪些可執(zhí)行組件可以并行和串行,從而計算本次任務中的關鍵路徑和最優(yōu)模型,提高運行速度,優(yōu)化CPU和內(nèi)存,降低流量消耗?!緦@綀D】【附圖說明】[0012]下面結(jié)合附圖和實例對本發(fā)明作進一步說明。[0013]圖1是本發(fā)明優(yōu)選實施例中所述系統(tǒng)的整體結(jié)構(gòu)示意圖;圖2是本發(fā)明優(yōu)選實施例中分割為原子對象后的語法樹示意圖;圖3是本發(fā)明優(yōu)選實施例中優(yōu)化合并后的語法樹示意圖。【具體實施方式】[0014]實施例1:參照圖1所示,本發(fā)明的優(yōu)選實施例提供了一種基于云計算的SQL語句處理系統(tǒng),包括:編譯解析器,用于將接收到的SQL語句或存儲過程的文本轉(zhuǎn)換為對應的原子對象;合并優(yōu)化器,用于遍歷每個SQL語句的原子對象,將具有相同內(nèi)容的原子對象提取出來作為一個公用的原子對象;執(zhí)行監(jiān)控器,用于接收合并優(yōu)化器處理后的原子對象,為每個原子對象分配獨立的可執(zhí)行組件,并由可執(zhí)行組件的運行獲取計算結(jié)果。[0015]包含SQL語句的數(shù)據(jù)源具有多種,包括關系數(shù)據(jù)庫、hadoop、hbase、hypertable等,為了能適應讀取和寫入不同的數(shù)據(jù)源和數(shù)據(jù)格式(包括文件或二進制等),本發(fā)明設置有數(shù)據(jù)適配器。所述數(shù)據(jù)適配器相當于為不同的數(shù)據(jù)源提供了統(tǒng)一的接口,即可用于從不同的數(shù)據(jù)源讀取數(shù)據(jù),也可用于將數(shù)據(jù)寫入對應數(shù)據(jù)源。數(shù)據(jù)適配器在統(tǒng)一接口的同時,針對不同的數(shù)據(jù)源,單獨編寫不同的inputformat和outputformat對象,對不同的數(shù)據(jù)需要做單獨的特殊優(yōu)化和改進,充分利用各種不同的特點,實現(xiàn)數(shù)據(jù)讀取和輸入。數(shù)據(jù)適配器包括輸入數(shù)據(jù)適配器和輸出數(shù)據(jù)適配器,通過數(shù)據(jù)輸入適配器從不同的數(shù)據(jù)源讀取數(shù)據(jù),并傳遞至編譯解析器,當批量查詢SQL執(zhí)行完成后,系統(tǒng)調(diào)用輸出數(shù)據(jù)適配器,將執(zhí)行監(jiān)控器生成的計算結(jié)果寫入至對應的數(shù)據(jù)源中。[0016]編譯解析器接收到存儲過程的文本為SQL語句文本。所述編譯解析器包括:語法判斷單元,用于判斷對應的SQL語句是否符合語法規(guī)定;解析單元,用于將符合語法規(guī)定的SQL語句分割為對應字段表達式和/或條件表達式;語法分析對象單元,用于將字段表達式和/或條件表達式轉(zhuǎn)換成語法樹;原子對象單元,用于將語法樹里面的對象進一步分解為最小粒度的原子對象,所述最小粒度的原子對象包括字段、表名、函數(shù)和分組對象。[0017]當查詢的SQL語句或存儲過程的文本發(fā)送到編譯解析器中后,語法判斷單元首先進行語法判斷,如果有不符合語法的文本,就會報出異常,直接退出;之后,解析單元將符合語法的文本對象(SQL語句),分割為字段表達式和條件表達式等;之后,語法分析對象單元將文本對象轉(zhuǎn)成語法樹;而原子對象單元再將語法樹里面的對象進一步分解,一直分解成最小粒度的原子對象,其中最小粒度的原子對象包括字段、表名、函數(shù)和分組對象。系統(tǒng)會將原子對象保存到一個hashmap對象中,且不同的原子對象,都具有唯一的GUID編號。[0018]當編譯解析器把文本解析成原子對象后,就進入到合并優(yōu)化階段。通過合并優(yōu)化器遍歷每個SQL語句的原子對象,把具有相同的內(nèi)容的原子對象提取出來合并成一個公用的原子對象,存放到公共內(nèi)存池中,語法樹葉只是存放這個原子對象的引用。如果原子對象的父親節(jié)點是一個表達式對象,且整個表達式對象的內(nèi)容均相同,合并優(yōu)化器則將此相同的表達式對象提取出來,合并成一個表達式對象,存放到公共內(nèi)存對象池中,實現(xiàn)大對象的共享功能,如此類推,以合并優(yōu)化整個子SQL語句。對于hadoop系統(tǒng),其中原子對象按執(zhí)行過程分,可以分為map階段,combine過程和reduce階段三種類型,即合并優(yōu)化一個對象,最多可以減少3個過程處理。[0019]原子對象被優(yōu)化合并后,全部被同時輸入到執(zhí)行監(jiān)控器中。執(zhí)行監(jiān)控器包括執(zhí)行器和監(jiān)控器,在執(zhí)行器中,每個原子對象都可以找到和自己對應的一個可執(zhí)行組件,每個組件分別在執(zhí)行器中獨立執(zhí)行。監(jiān)控器會記錄每個可執(zhí)行組件的開始時間、結(jié)束時間、占用CPU和內(nèi)存、耗費網(wǎng)絡流量等參數(shù)。有了這些參數(shù),系統(tǒng)即可確定哪些組件可以并行運行,哪些組件必須串行運行,以便計算本次任務中的關鍵路徑和最優(yōu)模型,對系統(tǒng)性能等進行優(yōu)化。[0020]以上所述,本發(fā)明將SQL語句首先分割為原子對象,再對原子對象進行合并優(yōu)化,提取出公用的原子對象或表達式對象,為每個原子或表達式對象分配單獨的可執(zhí)行組件,并監(jiān)控執(zhí)行過程,根據(jù)監(jiān)控的每個可執(zhí)行組件的開始時間、結(jié)束時間、占用CPU和內(nèi)存及耗費網(wǎng)絡流量等參數(shù),確定哪些組件可以并行運行,哪些組件必須串行運行,并依此計算本次任務中的關鍵路徑和最優(yōu)模型,以便對系統(tǒng)性能等進行優(yōu)化。本發(fā)明在分割原子對象時,每個原子對象均有唯一的GUID編號,方便記錄及后續(xù)的合并優(yōu)化;公共內(nèi)存池中存儲的不僅是原子對象,亦可以是原子對象的父親節(jié)點——表達式對象,實現(xiàn)了大對象的共享功能;根據(jù)監(jiān)控的開始時間、結(jié)束時間、占用CPU和內(nèi)存及耗費網(wǎng)絡流量等參數(shù),及時判斷哪些可執(zhí)行組件可以并行和串行,從而計算本次任務中的關鍵路徑和最優(yōu)模型,提高運行速度,優(yōu)化CPU和內(nèi)存,降低流量消耗。[0021]實施例2:本優(yōu)選實施例以具體的例子為說明,對本發(fā)明進行進一步解釋。[0022]以批量提交的2條sql語句分別如下為例:SQLl:selecta,(a+b)asc,count(氺)fromtwherea+b>0groupbya,(a+b);SQL2:select(a+b)asc,count(氺)fromtwherea+b+d>100groupby(a+b)。[0023]參照圖2所示,首先通過編譯解析器,將每條sql語句循環(huán)分解成語法樹,將樹枝節(jié)點分解成最小粒度的原子對象(字段,表名,函數(shù),分組對象),分解后的結(jié)果即圖中顯示內(nèi)容。以SQLl為例,分解后,a,(a+b)asc為字段對象,countO)為函數(shù)對象,(a+b)asc中的a+b為為字段對象a、b與運算對象+的組合,表對象為t,查找條件為a+b>0,條件a+b>O同樣是字段對象a、b與運算對象+的組合。SQL2的分解類似,詳見圖中的結(jié)果。[0024]之后,參照圖3所示,通過合并優(yōu)化器,合并語法樹里面每個相同的子節(jié)點,形成公共內(nèi)存池。其中(a+b)表達式對象在SQL語法樹中不需要a和b這2個字段對象。公共內(nèi)存池中⑶ID編號及對應原子對象或表達式對象亦參照圖中所示。同樣以SQLl為例,合并優(yōu)化后,公共原子對象I為a,公共表達式對象3為a+b,公共的表對象4為t。SQL2合并優(yōu)化后的結(jié)果見圖中所述。[0025]之后,執(zhí)行監(jiān)控器將優(yōu)化合并后的對象存入內(nèi)存,并先執(zhí)行公共內(nèi)存池里面的對象,然后再分別并行執(zhí)行2個SQL語法樹。在hadoop執(zhí)行的map,combine,reduce3個階段分別找到對應的組件解釋執(zhí)行,如groupby對象作為map的key值,count(*)就是計數(shù)器加1,如果是a+b表達式,則調(diào)用表達式對象進行計算,如字段a只是通過數(shù)據(jù)適配器從hadoop等數(shù)據(jù)源里面讀取一次數(shù)據(jù)后給2個SQL語法樹進行計算。[0026]以上所述,只是本發(fā)明的較佳實施例而已,本發(fā)明并不局限于上述實施方式,只要其以相同的手段達到本發(fā)明的技術效果,都應屬于本發(fā)明的保護范圍。【權(quán)利要求】1.一種基于云計算的SQL語句處理系統(tǒng),其特征在于,包括:編譯解析器,用于將接收到的SQL語句或存儲過程的文本轉(zhuǎn)換為對應的原子對象;合并優(yōu)化器,用于遍歷每個SQL語句的原子對象,將具有相同內(nèi)容的原子對象提取出來作為一個公用的原子對象;執(zhí)行監(jiān)控器,用于接收合并優(yōu)化器處理后的原子對象,為每個原子對象分配獨立的可執(zhí)行組件,并由可執(zhí)行組件的運行獲取計算結(jié)果。2.根據(jù)權(quán)利要求1所述的SQL語句處理系統(tǒng),其特征在于,還包括數(shù)據(jù)適配器,所述數(shù)據(jù)適配器包括數(shù)據(jù)輸入適配器和數(shù)據(jù)輸出適配器,其中:所述數(shù)據(jù)輸入適配器用于從不同的數(shù)據(jù)源讀取數(shù)據(jù),并傳遞至編譯解析器;所述數(shù)據(jù)輸出適配器用于將執(zhí)行監(jiān)控器生成的計算結(jié)果寫入至對應的數(shù)據(jù)源中。3.根據(jù)權(quán)利要求1所述的SQL語句處理系統(tǒng),其特征在于,所述存儲過程的文本為SQL語句文本。4.根據(jù)權(quán)利要求1所述的SQL語句處理系統(tǒng),其特征在于,所述編譯解析器包括:語法判斷單元,用于判斷對應的SQL語句是否符合語法規(guī)定;解析單元,用于將符合語法規(guī)定的SQL語句分割為對應字段表達式和/或條件表達式;語法分析對象單元,用于將字段表達式和/或條件表達式轉(zhuǎn)換成語法樹;原子對象單元,用于將語法樹里面的對象進一步分解為最小粒度的原子對象,所述最小粒度的原子對象包括字段、表名、函數(shù)和分組對象。5.根據(jù)權(quán)利要求4所述的SQL語句處理系統(tǒng),其特征在于,所述最小粒度的原子對象被保存至一個hashmap對象中,且不同的原子對象,都具有唯一的⑶ID編號。6.根據(jù)權(quán)利要求1所述的SQL語句處理系統(tǒng),其特征在于,所述合并優(yōu)化器在提取公用的原子對象時,若原子對象的父親節(jié)點是一個表達式對象,且所有原子對象的表達式對象內(nèi)容相同,則提取該表達式對象作為公用的表達式對象,所述提取的公用的原子對象、表達式對象均被存入至公共內(nèi)存池中。7.根據(jù)權(quán)利要求1所述的SQL語句處理系統(tǒng),其特征在于,所述執(zhí)行監(jiān)控器包括:執(zhí)行器,用于為為每個原子對象分配獨立的可執(zhí)行組件,每個組件分別在執(zhí)行器中獨立執(zhí)行;監(jiān)控器,用于記錄每個可執(zhí)行組件的開始時間、結(jié)束時間、占用CPU和內(nèi)存及耗費網(wǎng)絡流量參數(shù),以優(yōu)化可執(zhí)行組件的串行與并行,獲取本次計算中的關鍵路徑和最優(yōu)模型?!疚臋n編號】G06F17/30GK104391895SQ201410636239【公開日】2015年3月4日申請日期:2014年11月12日優(yōu)先權(quán)日:2014年11月12日【發(fā)明者】別志銘,張健明,張勇鵬,王旭,王禮,吳楠申請人:珠海世紀鼎利通信科技股份有限公司