結(jié)構(gòu)化查詢語言程序的計(jì)算方法、調(diào)整方法和服務(wù)器的制造方法
【專利摘要】本申請(qǐng)涉及一種SQL程序的計(jì)算方法、調(diào)整方法和服務(wù)器。該方法包括:服務(wù)器獲取待計(jì)算的原始SQL程序,該原始SQL程序攜帶有標(biāo)識(shí)信息;根據(jù)所述原始SQL程序的標(biāo)識(shí)信息,在優(yōu)化數(shù)據(jù)庫中提取所述標(biāo)識(shí)信息對(duì)應(yīng)的優(yōu)化SQL程序;其中,所述優(yōu)化SQL程序是所述服務(wù)器對(duì)原始數(shù)據(jù)庫中的所有原始SQL程序進(jìn)行分解和重組的優(yōu)化處理后得到的,所述優(yōu)化SQL程序包括優(yōu)化邏輯結(jié)果;根據(jù)所述優(yōu)化SQL程序的優(yōu)化邏輯結(jié)果的內(nèi)容,對(duì)所述優(yōu)化SQL程序進(jìn)行計(jì)算,以獲得所述原始SQL程序的計(jì)算結(jié)果。本申請(qǐng)實(shí)施例提高了對(duì)原始SQL程序計(jì)算的效率,減輕了服務(wù)器對(duì)源數(shù)據(jù)的訪問負(fù)擔(dān)。
【專利說明】結(jié)構(gòu)化查詢語言程序的計(jì)算方法、調(diào)整方法和服務(wù)器
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及數(shù)據(jù)查詢領(lǐng)域,尤其涉及一種結(jié)構(gòu)化查詢語言SQL程序的計(jì)算方法、調(diào)整方法和服務(wù)器。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)的快速發(fā)展,產(chǎn)生了大量的數(shù)據(jù)。對(duì)這些數(shù)據(jù)的操作,如查詢等,占用了大量的計(jì)算資源。并且由于數(shù)據(jù)查詢操作的相似性,導(dǎo)致大量信息的重復(fù)計(jì)算。例如,作為電子商務(wù)網(wǎng)站中,為完成數(shù)據(jù)操作,每天都要運(yùn)行一萬到兩萬個(gè)結(jié)構(gòu)化查詢語言(Structured Query Language, SQL)程序,在運(yùn)行時(shí),通過調(diào)度系統(tǒng)實(shí)現(xiàn)所有SQL程序的順序調(diào)度。這些SQL程序看上去是為了解決各種各樣的業(yè)務(wù)問題,但其本質(zhì)上是對(duì)于源數(shù)據(jù)的類似操作,由于計(jì)算的相似性,導(dǎo)致大量的重復(fù)計(jì)算。
[0003]現(xiàn)有技術(shù)下,SQL程序的計(jì)算方法為:對(duì)每個(gè)需要運(yùn)行的SQL程序都進(jìn)行完整的計(jì)算?,F(xiàn)有的SQL程序的計(jì)算方法的缺點(diǎn)是:很多SQL程序都是對(duì)源數(shù)據(jù)的類似操作,因此,對(duì)每個(gè)SQL程序都進(jìn)行完整的計(jì)算相當(dāng)于每次都對(duì)源數(shù)據(jù)進(jìn)行掃描,在源數(shù)據(jù)量大的情況下,這種運(yùn)算嚴(yán)重浪費(fèi)了計(jì)算資源,而且延長(zhǎng)了計(jì)算時(shí)間,計(jì)算效率低。
【發(fā)明內(nèi)容】
[0004]本申請(qǐng)的目的是,提供一種SQL程序的計(jì)算方法、調(diào)整方法和服務(wù)器,以實(shí)現(xiàn)服務(wù)器自動(dòng)對(duì)要進(jìn)行運(yùn)算的原始SQL程序進(jìn)行調(diào)整得到優(yōu)化SQL程序,提高對(duì)原始SQL程序計(jì)算的效率,以及減輕服務(wù)器對(duì)源數(shù)據(jù)的訪問負(fù)擔(dān)。
[0005]為實(shí)現(xiàn)上述目的,本申請(qǐng)?zhí)峁┝艘环NSQL程序的計(jì)算方法,所述方法包括:
[0006]服務(wù)器獲取待計(jì)算的原始SQL程序,所述原始SQL程序攜帶有標(biāo)識(shí)信息;
[0007]根據(jù)所述原始SQL程序的標(biāo)識(shí)信息,在優(yōu)化數(shù)據(jù)庫中提取所述標(biāo)識(shí)信息對(duì)應(yīng)的優(yōu)化SQL程序;其中,所述優(yōu)化SQL程序是所述服務(wù)器對(duì)原始數(shù)據(jù)庫中的所有原始SQL程序進(jìn)行分解和重組的優(yōu)化處理后得到的,所述優(yōu)化SQL程序包括優(yōu)化邏輯結(jié)果;
[0008]根據(jù)所述優(yōu)化SQL程序的優(yōu)化邏輯結(jié)果的內(nèi)容,對(duì)所述優(yōu)化SQL程序進(jìn)行計(jì)算,以獲得所述原始SQL程序的計(jì)算結(jié)果。
[0009]本申請(qǐng)還提供了一種SQL程序的調(diào)整方法,所述方法包括:
[0010]使用語法解析器對(duì)所有所述原始SQL程序按照最小的語法結(jié)構(gòu)詞進(jìn)行拆分處理獲得語法節(jié)點(diǎn),并且將拆分后的所有語法節(jié)點(diǎn)按照各個(gè)節(jié)點(diǎn)之間的原始語法關(guān)系組裝為一個(gè)語法樹;
[0011]對(duì)所有原始SQL程序的語法節(jié)點(diǎn)組裝后的所述語法樹之間進(jìn)行匹配運(yùn)算,得到匹配的最大子樹;
[0012]將所述匹配的最大子樹的計(jì)算邏輯的所述優(yōu)化邏輯結(jié)果保存在第二緩存表中;
[0013]使用第二緩存表中保存的所述計(jì)算邏輯的優(yōu)化邏輯結(jié)果替換所述原始SQL程序中與所述匹配的最大子樹對(duì)應(yīng)的子程序,得到優(yōu)化SQL程序。[0014]相應(yīng)地,本申請(qǐng)還提供了一種服務(wù)器,所述服務(wù)器包括:
[0015]獲取單元,用于服務(wù)器獲取待計(jì)算的原始SQL程序,所述原始SQL程序攜帶有標(biāo)識(shí)
信息;
[0016]提取單元,用于根據(jù)所述原始SQL程序的標(biāo)識(shí)信息,在優(yōu)化數(shù)據(jù)庫中提取所述標(biāo)識(shí)信息對(duì)應(yīng)的優(yōu)化SQL程序;其中,所述優(yōu)化SQL程序是所述服務(wù)器對(duì)原始數(shù)據(jù)庫中的所有原始SQL程序進(jìn)行分解和重組的優(yōu)化處理后得到的,所述優(yōu)化SQL程序包括優(yōu)化邏輯結(jié)果;
[0017]計(jì)算單元,用于根據(jù)所述優(yōu)化SQL程序的優(yōu)化邏輯結(jié)果的內(nèi)容,對(duì)所述優(yōu)化SQL程序進(jìn)行計(jì)算,以獲得所述原始SQL程序的計(jì)算結(jié)果。
[0018]相應(yīng)地,本申請(qǐng)還提供了一種服務(wù)器,所述服務(wù)器包括:
[0019]建樹單元,用于使用語法解析器對(duì)所有所述原始SQL程序按照最小的語法結(jié)構(gòu)詞進(jìn)行拆分處理獲得語法節(jié)點(diǎn),并且將拆分后的所有語法節(jié)點(diǎn)按照各個(gè)節(jié)點(diǎn)之間的原始語法關(guān)系組裝為一個(gè)語法樹;
[0020]匹配單元,用于對(duì)所有原始SQL程序的語法節(jié)點(diǎn)組裝后的所述語法樹之間進(jìn)行匹配運(yùn)算,得到匹配的最大子樹;
[0021]存儲(chǔ)單元,用于將所述匹配的最大子樹的計(jì)算邏輯的所述優(yōu)化邏輯結(jié)果保存在第
二緩存表中;
[0022]替換單元,用于使用第二緩存表中保存的所述計(jì)算邏輯的優(yōu)化邏輯結(jié)果替換所述原始SQL程序中與所述匹配的最大子樹對(duì)應(yīng)的子程序,得到優(yōu)化SQL程序。
[0023]因此,本申請(qǐng)實(shí)現(xiàn)了服務(wù)器對(duì)大量的原始SQL程序進(jìn)行分解和重組,得到優(yōu)化SQL程序,并且對(duì)原始SQL程序公用的計(jì)算邏輯的優(yōu)化邏輯結(jié)果存儲(chǔ)在第二緩存表中,將優(yōu)化邏輯結(jié)果的內(nèi)容存儲(chǔ)在第一緩存表中,使得對(duì)原始SQL的計(jì)算可以替換為對(duì)優(yōu)化SQL程序的計(jì)算,提高了對(duì)原始SQL程序計(jì)算的效率,以及減輕了服務(wù)器對(duì)源數(shù)據(jù)的訪問負(fù)擔(dān)。
【專利附圖】
【附圖說明】
[0024]圖1為本申請(qǐng)實(shí)施例提供的一種SQL程序的計(jì)算方法流程圖;
[0025]圖2為本申請(qǐng)實(shí)施例提供的一種SQL程序的調(diào)整方法流程圖;
[0026]圖3 (a)為本申請(qǐng)實(shí)施例提供的原始SQL程序I對(duì)應(yīng)的樹結(jié)構(gòu)示意圖;
[0027]圖3 (b)為本申請(qǐng)實(shí)施例提供的原始SQL程序2對(duì)應(yīng)的樹結(jié)構(gòu)示意圖;
[0028]圖3 (C)為本申請(qǐng)實(shí)施例提供的原始SQL程序I和原始SQL程序2的最大匹配子樹示意圖;
[0029]圖4為本申請(qǐng)實(shí)施例提供的一種服務(wù)器的示意圖;
[0030]圖5為本申請(qǐng)實(shí)施例提供的一種服務(wù)器的示意圖。
【具體實(shí)施方式】
[0031]下面通過附圖和實(shí)施例,對(duì)本申請(qǐng)的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
[0032]本申請(qǐng)?zhí)峁┑腟QL程序的計(jì)算方法及服務(wù)器,通過對(duì)原始SQL程序進(jìn)行分組和重組,提取到多個(gè)原始SQL程序中公用的計(jì)算邏輯,將該公用的計(jì)算邏輯及計(jì)算邏輯的優(yōu)化邏輯結(jié)果保存在第二緩存表中,將該優(yōu)化邏輯結(jié)果的內(nèi)容保存在第一緩存表中,使用公用的計(jì)算邏輯的優(yōu)化邏輯結(jié)果代替原始SQL程序中的匹配的公用的計(jì)算邏輯,構(gòu)建出優(yōu)化SQL程序,并將優(yōu)化SQL程序保存在優(yōu)化數(shù)據(jù)庫中。在服務(wù)器對(duì)原始SQL程序進(jìn)行計(jì)算時(shí),服務(wù)器根據(jù)原始SQL程序的標(biāo)識(shí)信息在優(yōu)化數(shù)據(jù)庫中獲取對(duì)應(yīng)的優(yōu)化SQL程序,通過對(duì)優(yōu)化SQL程序的計(jì)算完成對(duì)原始SQL程序的計(jì)算。從而實(shí)現(xiàn)服務(wù)器自動(dòng)對(duì)要進(jìn)行運(yùn)算的原始SQL程序進(jìn)行優(yōu)化得到優(yōu)化SQL程序,提高對(duì)原始SQL程序計(jì)算的效率,以及減輕服務(wù)器對(duì)源數(shù)據(jù)的訪問負(fù)擔(dān)。
[0033]本申請(qǐng)實(shí)施例提供的SQL程序的計(jì)算方法和服務(wù)器在實(shí)際應(yīng)用時(shí),作為一種新的計(jì)算方法可應(yīng)用于被開源語法分析器Antlr支持的數(shù)據(jù)庫系統(tǒng)的大數(shù)據(jù)處理方案中,在服務(wù)器對(duì)大量的SQL程序進(jìn)行計(jì)算時(shí),通過對(duì)原始SQL程序的分解和重組,提取到多個(gè)SQL程序中公用的計(jì)算邏輯,并將該公用的計(jì)算邏輯及該計(jì)算邏輯的優(yōu)化邏輯結(jié)果保存在緩存表中,使用公用的優(yōu)化邏輯結(jié)果代替原始SQL程序中的匹配的部分,構(gòu)建出優(yōu)化SQL程序。通過對(duì)SQL程序的計(jì)算實(shí)現(xiàn)對(duì)原始SQL程序的計(jì)算,提高了對(duì)原始SQL程序計(jì)算的效率,以及減輕了服務(wù)器對(duì)源數(shù)據(jù)的訪問負(fù)擔(dān)。
[0034]如圖1所示,其為本申請(qǐng)實(shí)施例提供的一種SQL程序的計(jì)算方法流程圖。該實(shí)施例主體是服務(wù)器,其中詳細(xì)描述了如何對(duì)原始SQL程序進(jìn)行計(jì)算。本申請(qǐng)實(shí)施例SQL程序的計(jì)算方法具體包括以下步驟:
[0035]步驟101,服務(wù)器獲取待計(jì)算的原始SQL程序,所述原始SQL程序攜帶有標(biāo)識(shí)信息;
[0036]具體地,當(dāng)服務(wù)器需要對(duì)大量的原始SQL程序進(jìn)行計(jì)算時(shí),可以首先訪問原始數(shù)據(jù)庫,將要進(jìn)行計(jì)算的數(shù)據(jù)庫從原始數(shù)據(jù)庫中提取出來。其中,原始數(shù)據(jù)庫中保存了所有需要進(jìn)行計(jì)算的原始SQL程序。每一個(gè)SQL程序都有一個(gè)唯一的標(biāo)識(shí)信息,在原始數(shù)據(jù)庫中除了保存SQL程序外,還保存了對(duì)應(yīng)的SQL程序的標(biāo)識(shí)信息。
[0037]步驟102,根據(jù)所述原始SQL程序的標(biāo)識(shí)信息,在優(yōu)化數(shù)據(jù)庫中提取所述標(biāo)識(shí)信息對(duì)應(yīng)的優(yōu)化SQL程序;其中,所述優(yōu)化SQL程序是所述服務(wù)器對(duì)原始數(shù)據(jù)庫中的所有原始SQL程序進(jìn)行分解和重組的優(yōu)化處理后得到的,所述優(yōu)化SQL程序包括優(yōu)化邏輯結(jié)果;
[0038]服務(wù)器在離線時(shí),可以首先對(duì)原始數(shù)據(jù)庫中的原始SQL程序進(jìn)行優(yōu)化調(diào)整,并將得到的優(yōu)化SQL程序和原始SQL程序都按照相同的標(biāo)識(shí)信息保存在優(yōu)化數(shù)據(jù)庫中。其中,優(yōu)化數(shù)據(jù)庫中保存了優(yōu)化SQL程序和原始SQL程序,服務(wù)器在離線時(shí)可以對(duì)優(yōu)化數(shù)據(jù)庫中保存的優(yōu)化SQL程序進(jìn)行更新。
[0039]服務(wù)器對(duì)原始SQL程序的優(yōu)化過程為:
[0040]I)使用語法解析器,對(duì)所有所述原始SQL程序按照最小的語法結(jié)構(gòu)詞進(jìn)行拆分處理獲得語法節(jié)點(diǎn),并且將拆分后的所有語法節(jié)點(diǎn)按照各個(gè)節(jié)點(diǎn)之間的原始語法關(guān)系組裝為一個(gè)語法樹;
[0041]2)對(duì)所有原始SQL程序的語法節(jié)點(diǎn)組裝后的所述語法樹之間進(jìn)行匹配運(yùn)算,得到匹配的最大子樹;
[0042]3)將所述匹配的最大子樹的計(jì)算邏輯的所述優(yōu)化邏輯結(jié)果保存在第二緩存表中;
[0043]4)使用第二緩存表中保存的所述計(jì)算邏輯的優(yōu)化邏輯結(jié)果替換所述原始SQL程序中與所述匹配的最大子樹對(duì)應(yīng)的子程序,得到優(yōu)化SQL程序。[0044]其中,所述匹配運(yùn)算是指從語法樹的葉節(jié)點(diǎn)開始向上掃描,匹配上一層相同的父節(jié)點(diǎn)及父節(jié)點(diǎn)的子節(jié)點(diǎn),如果一致,則繼續(xù)向上層匹配,當(dāng)上層找不到匹配的節(jié)點(diǎn)時(shí),則匹配操作結(jié)束,所得到的匹配節(jié)點(diǎn)所組成的子樹就是兩個(gè)原始SQL程序的匹配的最大子樹。對(duì)于該匹配的最大子樹,在語法上具有完整性,可以按照這個(gè)子樹的計(jì)算邏輯及優(yōu)化邏輯結(jié)果建立第二緩存表,并將這個(gè)子樹的計(jì)算邏輯及優(yōu)化邏輯結(jié)果放入第二緩存表中,這樣所有具有該子樹對(duì)應(yīng)的子程序的原始SQL程序可以公用一份優(yōu)化邏輯結(jié)果。而對(duì)于這個(gè)匹配的最大子樹的計(jì)算邏輯的優(yōu)化邏輯結(jié)果的內(nèi)容,則可以保存在第一緩存表中。
[0045]所述的第一緩存表的格式是資源文件(Resource File,RCFile)格式,緩存表的各列的內(nèi)容是匹配子樹的計(jì)算邏輯的優(yōu)化邏輯結(jié)果的內(nèi)容,這樣在SQL程序?qū)?yīng)的語法中種包括該匹配子樹的計(jì)算邏輯時(shí),服務(wù)器便可以直接從第二緩存表中掃描該計(jì)算結(jié)果,而無須重新對(duì)大量的源數(shù)據(jù)進(jìn)行計(jì)算。第二緩存表MySQL格式的緩存表,其中保存了匹配子樹對(duì)應(yīng)的計(jì)算邏輯,如匹配子樹對(duì)應(yīng)的SQL語句。
[0046]步驟103,根據(jù)所述優(yōu)化SQL程序的優(yōu)化邏輯結(jié)果的內(nèi)容,對(duì)所述優(yōu)化SQL程序進(jìn)行計(jì)算,以獲得所述原始SQL程序的計(jì)算結(jié)果。
[0047]在對(duì)優(yōu)化SQL程序進(jìn)行計(jì)算時(shí),運(yùn)算到優(yōu)化SQL程序中的匹配子樹對(duì)應(yīng)的計(jì)算邏輯的優(yōu)化邏輯結(jié)果時(shí),可以直接訪問第一緩存表中的優(yōu)化邏輯結(jié)果的內(nèi)容。
[0048]根據(jù)優(yōu)化邏輯結(jié)果的內(nèi)容,按照正常的SQL程序的計(jì)算方法,即可完成對(duì)優(yōu)化SQL程序的計(jì)算,從而完成對(duì)原始SQL程序的計(jì)算。
[0049]本申請(qǐng)實(shí)施例通過服務(wù)器獲取待計(jì)算的原始SQL程序,所述原始SQL程序攜帶有標(biāo)識(shí)信息;根據(jù)所述原始SQL程序的標(biāo)識(shí)信息,在優(yōu)化數(shù)據(jù)庫中提取所述標(biāo)識(shí)信息對(duì)應(yīng)的優(yōu)化SQL程序;其中,所述優(yōu)化SQL程序是所述服務(wù)器對(duì)原始數(shù)據(jù)庫中的所有原始SQL程序進(jìn)行分解和重組的優(yōu)化處理后得到的,所述優(yōu)化SQL程序包括優(yōu)化邏輯結(jié)果;根據(jù)所述優(yōu)化SQL程序的優(yōu)化邏輯結(jié)果的內(nèi)容,對(duì)所述優(yōu)化SQL程序進(jìn)行計(jì)算,以獲得所述原始SQL程序的計(jì)算結(jié)果。由此提高了對(duì)原始SQL程序計(jì)算的效率,以及減輕了服務(wù)器對(duì)源數(shù)據(jù)的訪問負(fù)擔(dān)。
[0050]在一個(gè)優(yōu)選的實(shí)施例中,如圖1所示,在步驟101之后,還包括:
[0051]步驟104,根據(jù)所述SQL程序的標(biāo)識(shí)信息,在所述優(yōu)化數(shù)據(jù)庫中不能獲取到所述標(biāo)識(shí)信息對(duì)應(yīng)的優(yōu)化SQL程序時(shí),對(duì)所述原始SQL程序進(jìn)行計(jì)算。
[0052]具體地,如果服務(wù)器不能在優(yōu)化數(shù)據(jù)庫中找到要計(jì)算的原始SQL程序的對(duì)應(yīng)的優(yōu)化SQL程序,則可以按照正常的計(jì)算方法對(duì)該程序進(jìn)行計(jì)算。
[0053]在另一個(gè)優(yōu)選的實(shí)施例中,如圖1所示,在步驟102之前,還包括:
[0054]步驟104,對(duì)原始數(shù)據(jù)庫中的所有原始SQL程序進(jìn)行優(yōu)化處理得到所述優(yōu)化SQL程序,并將所述優(yōu)化SQL程序保存在所述優(yōu)化數(shù)據(jù)庫中。
[0055]具體地,在對(duì)原始SQL程序進(jìn)行計(jì)算之前,在離線情況下,可對(duì)原始數(shù)據(jù)庫中的所有原始SQL程序進(jìn)行優(yōu)化處理,如果原始SQL程序可以進(jìn)行優(yōu)化,則可得到優(yōu)化SQL程序,并保存在優(yōu)化數(shù)據(jù)庫中,否則不能得到優(yōu)化SQL程序。
[0056]上述實(shí)施例描述了服務(wù)器對(duì)原始SQL程序進(jìn)行計(jì)算的方法,下面的實(shí)施例介紹對(duì)原始SQL程序進(jìn)行優(yōu)化調(diào)整得到優(yōu)化SQL程序的方法。如圖2所示,其為本申請(qǐng)實(shí)施例提供的一種SQL程序的調(diào)整方法流程圖。該實(shí)施例的執(zhí)行主體是服務(wù)器,其中詳細(xì)描述了服務(wù)器對(duì)原始SQL程序進(jìn)行分解和重組的優(yōu)化處理得到優(yōu)化SQL程序的過程。本申請(qǐng)實(shí)施例具體包括以下步驟:
[0057]步驟201,使用語法解析器對(duì)所有所述原始SQL程序按照最小的語法結(jié)構(gòu)詞進(jìn)行拆分處理獲得語法節(jié)點(diǎn),并且將拆分后的所有語法節(jié)點(diǎn)按照各個(gè)節(jié)點(diǎn)之間的原始語法關(guān)系組裝為一個(gè)語法樹;
[0058]使用語法解析器,如Antlr可以對(duì)每個(gè)SQL程序進(jìn)行分解,分解到最小的粒度,然后按照每個(gè)粒度之間的語法關(guān)系進(jìn)行組裝,得到一個(gè)語法樹。
[0059]例如,數(shù)據(jù)庫中的源數(shù)據(jù)表包括表r_861161'、表s_child_user等。其中表r_seller 中包括列 Pt、列 user_id、列 nick 等,而表 s_child_user 包括 pt 列、列 L0GIN_ID等。
[0060]對(duì)于SQL程序1:
[0061]
【權(quán)利要求】
1.一種結(jié)構(gòu)化查詢語言SQL程序的計(jì)算方法,其特征在于,所述方法包括: 服務(wù)器獲取待計(jì)算的原始SQL程序,所述原始SQL程序攜帶有標(biāo)識(shí)信息; 根據(jù)所述原始SQL程序的標(biāo)識(shí)信息,在優(yōu)化數(shù)據(jù)庫中提取所述標(biāo)識(shí)信息對(duì)應(yīng)的優(yōu)化SQL程序;其中,所述優(yōu)化SQL程序是所述服務(wù)器對(duì)原始數(shù)據(jù)庫中的所有原始SQL程序進(jìn)行分解和重組的優(yōu)化處理后得到的,所述優(yōu)化SQL程序包括優(yōu)化邏輯結(jié)果; 根據(jù)所述優(yōu)化SQL程序的優(yōu)化邏輯結(jié)果的內(nèi)容,對(duì)所述優(yōu)化SQL程序進(jìn)行計(jì)算,以獲得所述原始SQL程序的計(jì)算結(jié)果。
2.根據(jù)權(quán)利要求1所述的SQL程序的計(jì)算方法,其特征在于,所述獲取待計(jì)算的原始SQL程序之后,還包括:根據(jù)所述原始SQL程序的標(biāo)識(shí)信息,在所述優(yōu)化數(shù)據(jù)庫中不能獲取到所述標(biāo)識(shí)信息對(duì)應(yīng)的優(yōu)化SQL程序時(shí),對(duì)所述原始SQL程序進(jìn)行計(jì)算。
3.根據(jù)權(quán)利要求1所述的SQL程序的計(jì)算方法,其特征在于,所述方法還包括: 將所述優(yōu)化邏輯結(jié)果的內(nèi)容存放于所述第一緩存表中。
4.根據(jù)權(quán)利要求1所述的SQL程序的計(jì)算方法,其特征在于,所述方法還包括:對(duì)原始數(shù)據(jù)庫中的所有原始SQL程序進(jìn)行優(yōu)化處理得到所述優(yōu)化SQL程序,并將所述優(yōu)化SQL程序保存在所述優(yōu)化數(shù)據(jù)庫中。
5.根據(jù)權(quán)利要求4所述的SQL程序的計(jì)算方法,其特征在于,所述對(duì)原始數(shù)據(jù)庫中的所有原始SQL程序進(jìn)行分解和重組的優(yōu)化處理得到所述優(yōu)化SQL程序具體為: 使用語法解析器,對(duì)所`有所述原始SQL程序按照最小的語法結(jié)構(gòu)詞進(jìn)行拆分處理獲得語法節(jié)點(diǎn),并且將拆分后的所有語法節(jié)點(diǎn)按照各個(gè)節(jié)點(diǎn)之間的原始語法關(guān)系組裝為一個(gè)語法樹; 對(duì)所有原始SQL程序的語法節(jié)點(diǎn)組裝后的所述語法樹之間進(jìn)行匹配運(yùn)算,得到匹配的最大子樹; 將所述匹配的最大子樹的計(jì)算邏輯的所述優(yōu)化邏輯結(jié)果保存在第二緩存表中; 使用第二緩存表中保存的所述計(jì)算邏輯的優(yōu)化邏輯結(jié)果替換所述原始SQL程序中與所述匹配的最大子樹對(duì)應(yīng)的子程序,得到優(yōu)化SQL程序。
6.根據(jù)權(quán)利要求5所述的SQL程序的計(jì)算方法,其特征在于,所述使用第二緩存表中保存的所述計(jì)算邏輯替換所述原始SQL程序中與所述匹配的最大子樹對(duì)應(yīng)的子程序,得到優(yōu)化SQL程序具體為: 使用所述第二緩存表中保存的所述的優(yōu)化邏輯結(jié)果替換所述語法樹中與所述優(yōu)化邏輯結(jié)果所對(duì)應(yīng)的最大子樹相應(yīng)的優(yōu)化分支,所述優(yōu)化分支是所述原始SQL程序中與所述匹配的最大子樹對(duì)應(yīng)的子程序的樹形結(jié)構(gòu); 從所述優(yōu)化分支向所述語法樹的根部掃描,得到所述優(yōu)化SQL程序的樹形結(jié)構(gòu),從而得到所述優(yōu)化SQL程序。
7.根據(jù)權(quán)利要求5所述的SQL程序的計(jì)算方法,其特征在于,所述使用所述第二緩存表中保存的所述的優(yōu)化邏輯結(jié)果替換所述語法樹中與所述優(yōu)化邏輯結(jié)果所對(duì)應(yīng)的最大子樹相應(yīng)的優(yōu)化分支之前還包括: 使用語法解析器對(duì)每一條所述原始SQL程序按照最小的語法結(jié)構(gòu)進(jìn)行拆分處理,并且將拆分后的所有語法節(jié)點(diǎn)按照各個(gè)粒度之間的語法關(guān)系組裝為一個(gè)語法樹。
8.—種結(jié)構(gòu)化查詢語言SQL程序的調(diào)整方法,其特征在于,所述方法包括:使用語法解析器對(duì)所有所述原始SQL程序按照最小的語法結(jié)構(gòu)詞進(jìn)行拆分處理獲得語法節(jié)點(diǎn),并且將拆分后的所有語法節(jié)點(diǎn)按照各個(gè)節(jié)點(diǎn)之間的原始語法關(guān)系組裝為一個(gè)語法樹; 對(duì)所有原始SQL程序的語法節(jié)點(diǎn)組裝后的所述語法樹之間進(jìn)行匹配運(yùn)算,得到匹配的最大子樹; 將所述匹配的最大子樹的計(jì)算邏輯的所述優(yōu)化邏輯結(jié)果保存在第二緩存表中; 使用第二緩存表中保存的所述計(jì)算邏輯的優(yōu)化邏輯結(jié)果替換所述原始SQL程序中與所述匹配的最大子樹對(duì)應(yīng)的子程序,得到優(yōu)化SQL程序。
9.根據(jù)權(quán)利要求8所述的SQL程序的計(jì)算方法,其特征在于,所述使用第二緩存表中保存的所述計(jì)算邏輯替換所述原始SQL程序中與所述匹配的最大子樹對(duì)應(yīng)的子程序,得到優(yōu)化SQL程序具體為: 使用所述第二緩存表中保存的所述的優(yōu)化邏輯結(jié)果替換所述語法樹中與所述優(yōu)化邏輯結(jié)果所對(duì)應(yīng)的最大子樹相應(yīng)的優(yōu)化分支,所述優(yōu)化分支是所述原始SQL程序中與所述匹配的最大子樹對(duì)應(yīng)的子程序的樹形結(jié)構(gòu); 從所述優(yōu)化分支向所述語法樹的根部掃描,得到所述優(yōu)化SQL程序的樹形結(jié)構(gòu),從而得到所述優(yōu)化SQL程序。
10.根據(jù)權(quán)利要求8所述的SQL程序的計(jì)算方法,其特征在于,所述使用所述第二緩存表中保存的所述的優(yōu)化邏輯結(jié)果替換所述語法樹中與所述優(yōu)化邏輯結(jié)果所對(duì)應(yīng)的最大子樹相應(yīng)的優(yōu)化分支之前還包括: 使用語法解析器對(duì)每一條所述原始SQL程序按照最小的語法結(jié)構(gòu)進(jìn)行拆分處理,并且將拆分后的所有語法節(jié)點(diǎn)按照各個(gè)粒度之間的語法關(guān)系組裝為一個(gè)語法樹。
11.一種服務(wù)器,其特征在于,所述服務(wù)器包括: 獲取單元,用于服務(wù)器獲取待計(jì)算的原始SQL程序,所述原始SQL程序攜帶有標(biāo)識(shí)信息; 提取單元,用于根據(jù)所述原始SQL程序的標(biāo)識(shí)信息,在優(yōu)化數(shù)據(jù)庫中提取所述標(biāo)識(shí)信息對(duì)應(yīng)的優(yōu)化SQL程序;其中,所述優(yōu)化SQL程序是所述服務(wù)器對(duì)原始數(shù)據(jù)庫中的所有原始SQL程序進(jìn)行分解和重組的優(yōu)化處理后得到的,所述優(yōu)化SQL程序包括優(yōu)化邏輯結(jié)果; 計(jì)算單元,用于根據(jù)所述優(yōu)化SQL程序的優(yōu)化邏輯結(jié)果的內(nèi)容,對(duì)所述優(yōu)化SQL程序進(jìn)行計(jì)算,以獲得所述原始SQL程序的計(jì)算結(jié)果。
12.一種服務(wù)器,其特征在于,所述服務(wù)器包括: 建樹單元,用于使用語法解析器對(duì)所有所述原始SQL程序按照最小的語法結(jié)構(gòu)詞進(jìn)行拆分處理獲得語法節(jié)點(diǎn),并且將拆分后的所有語法節(jié)點(diǎn)按照各個(gè)節(jié)點(diǎn)之間的原始語法關(guān)系組裝為一個(gè)語法樹; 匹配單元,用于對(duì)所有原始SQL程序的語法節(jié)點(diǎn)組裝后的所述語法樹之間進(jìn)行匹配運(yùn)算,得到匹配的最大子樹; 存儲(chǔ)單元,用于將所述匹配的最大子樹的計(jì)算邏輯的所述優(yōu)化邏輯結(jié)果保存在第二緩存表中; 替換單元,用于使用第二緩存表中保存的所述計(jì)算邏輯的優(yōu)化邏輯結(jié)果替換所述原始SQL程序中與所述匹配的最大子樹對(duì)應(yīng)的子程序,得到優(yōu)化SQL程序。
【文檔編號(hào)】G06F17/30GK103729379SQ201210392343
【公開日】2014年4月16日 申請(qǐng)日期:2012年10月16日 優(yōu)先權(quán)日:2012年10月16日
【發(fā)明者】黃明 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司