一種數(shù)據(jù)查詢方法
【專利摘要】本申請公開了一種數(shù)據(jù)查詢方法,包括:客戶端向數(shù)據(jù)庫應(yīng)用服務(wù)器發(fā)送數(shù)據(jù)查詢命令;所述數(shù)據(jù)庫應(yīng)用服務(wù)器對所述數(shù)據(jù)查詢命令進(jìn)行優(yōu)化,其中,當(dāng)數(shù)據(jù)查詢命令包含預(yù)設(shè)的復(fù)雜操作關(guān)鍵字時,優(yōu)化后的數(shù)據(jù)查詢命令的查詢字段范圍內(nèi)包含所述復(fù)雜操作關(guān)鍵字在所述數(shù)據(jù)查詢命令中對應(yīng)的字段;數(shù)據(jù)庫應(yīng)用服務(wù)器將所述優(yōu)化后的數(shù)據(jù)查詢命令發(fā)送給存儲相應(yīng)數(shù)據(jù)的分布式數(shù)據(jù)服務(wù)器,所述分布式數(shù)據(jù)服務(wù)器將自身保存的所述優(yōu)化后的數(shù)據(jù)查詢命令中所述查詢字段范圍對應(yīng)的數(shù)據(jù)發(fā)送給所述數(shù)據(jù)庫應(yīng)用服務(wù)器;數(shù)據(jù)庫應(yīng)用服務(wù)器按照優(yōu)化前的數(shù)據(jù)查詢命令,對接收自所述分布式數(shù)據(jù)服務(wù)器的數(shù)據(jù)進(jìn)行查詢處理,并將所述查詢處理結(jié)果反饋給所述客戶端。采用本發(fā)明可以實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)庫查詢。
【專利說明】一種數(shù)據(jù)查詢方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫技術(shù),特別是涉及一種數(shù)據(jù)查詢方法。
【背景技術(shù)】
[0002]目前,隨著數(shù)據(jù)庫技術(shù)的廣泛應(yīng)用,數(shù)據(jù)規(guī)模及訪問量日趨龐大,傳統(tǒng)的集中式數(shù)據(jù)庫已無法滿足這種大規(guī)模數(shù)據(jù)的應(yīng)用需要。針對該問題,目前引入了分布式數(shù)據(jù)庫系統(tǒng),通過對數(shù)據(jù)進(jìn)行分片,將各數(shù)據(jù)片段分散到多臺數(shù)據(jù)服務(wù)器上進(jìn)行存儲管理,以實(shí)現(xiàn)大規(guī)模數(shù)據(jù)的分布式存儲。
[0003]目前分布式數(shù)據(jù)庫系統(tǒng)中,常采用水平分片的方式進(jìn)行數(shù)據(jù)分片,該方式下將選取某些業(yè)務(wù)字段作為拆分鍵,根據(jù)所述拆分鍵把全局關(guān)系的所有元組劃分成若干不相交的子集,每個子集為關(guān)系的一個片段。當(dāng)客戶端需要從數(shù)據(jù)庫系統(tǒng)查詢數(shù)據(jù)時,需要將相應(yīng)的SQL查詢命令發(fā)送給數(shù)據(jù)庫系統(tǒng),由系統(tǒng)根據(jù)該SQL查詢命令,將本機(jī)保存的所有元組數(shù)據(jù)中該SQL查詢命令最終查詢的業(yè)務(wù)字段(即SQL查詢命令中select后面的字段)的數(shù)據(jù)發(fā)送給客戶端。由客戶端再按照該SQL查詢命令對相關(guān)數(shù)據(jù)服務(wù)器發(fā)送的所有數(shù)據(jù)進(jìn)行處理,得到最終查詢結(jié)果。
[0004]上述分布式系統(tǒng)中的數(shù)據(jù)查詢方案不支持復(fù)雜的SQL查詢命令,例如,包含數(shù)據(jù)分組(GROUP)、排序(ORDER)等操作的查詢命令。因?yàn)?,上述查詢方案中各相關(guān)數(shù)據(jù)服務(wù)器所發(fā)送的數(shù)據(jù)僅為select命令對應(yīng)的字段,該字段往往與GROUP、ORDER等操作所依據(jù)的業(yè)務(wù)字段不一致,這樣,由于客戶端所獲取的數(shù)據(jù)僅為select命令對應(yīng)字段的數(shù)據(jù),因此無法對所接收的數(shù)據(jù)進(jìn)行分組(GROUP)、排序(ORDER)等處理。
[0005]由此可見,現(xiàn)有分布式系統(tǒng)的數(shù)據(jù)查詢方法無法滿足客戶端的復(fù)雜查詢操作需求。
【發(fā)明內(nèi)容】
[0006]有鑒于此,本發(fā)明的主要目的在于提供一種數(shù)據(jù)查詢方法,該方法可實(shí)現(xiàn)客戶端對數(shù)據(jù)庫系統(tǒng)的復(fù)雜查詢。
[0007]為了達(dá)到上述目的,本發(fā)明提出的技術(shù)方案為:
[0008]一種數(shù)據(jù)查詢方法,包括:
[0009]a、客戶端向數(shù)據(jù)庫應(yīng)用服務(wù)器發(fā)送數(shù)據(jù)查詢命令;
[0010]b、所述數(shù)據(jù)庫應(yīng)用服務(wù)器對所述數(shù)據(jù)查詢命令進(jìn)行優(yōu)化,其中,當(dāng)所述數(shù)據(jù)查詢命令包含預(yù)設(shè)的復(fù)雜操作關(guān)鍵字時,優(yōu)化后的數(shù)據(jù)查詢命令的查詢字段范圍內(nèi)包含所述復(fù)雜操作關(guān)鍵字在所述數(shù)據(jù)查詢命令中對應(yīng)的字段;
[0011]C、所述數(shù)據(jù)庫應(yīng)用服務(wù)器將所述優(yōu)化后的數(shù)據(jù)查詢命令發(fā)送給存儲相應(yīng)數(shù)據(jù)的分布式數(shù)據(jù)服務(wù)器,所述分布式數(shù)據(jù)服務(wù)器將自身保存的所述優(yōu)化后的數(shù)據(jù)查詢命令中所述查詢字段范圍對應(yīng)的數(shù)據(jù)發(fā)送給所述數(shù)據(jù)庫應(yīng)用服務(wù)器;
[0012]d、所述數(shù)據(jù)庫應(yīng)用服務(wù)器按照所述優(yōu)化前的數(shù)據(jù)查詢命令,對接收自所述分布式數(shù)據(jù)服務(wù)器的數(shù)據(jù)進(jìn)行查詢處理,并將所述查詢處理結(jié)果反饋給所述客戶端。
[0013]綜上所述,本發(fā)明提出的數(shù)據(jù)查詢方法,在將數(shù)據(jù)查詢命令發(fā)送給分布式數(shù)據(jù)服務(wù)器之前,先進(jìn)行優(yōu)化,使分布式數(shù)據(jù)服務(wù)器可以基于優(yōu)化后的命令返回用于實(shí)現(xiàn)復(fù)雜查詢的數(shù)據(jù),從而使數(shù)據(jù)庫應(yīng)用服務(wù)器可以完成復(fù)雜的查詢處理,實(shí)現(xiàn)客戶端對數(shù)據(jù)庫系統(tǒng)的復(fù)雜查詢。
【專利附圖】
【附圖說明】
[0014]圖1為本發(fā)明實(shí)施例一的流程示意圖。
【具體實(shí)施方式】
[0015]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例對本發(fā)明作進(jìn)一步地詳細(xì)描述。
[0016]本發(fā)明的核心思想是:數(shù)據(jù)庫系統(tǒng)收到客戶端的查詢請求后,對該查詢請求中的復(fù)雜操作關(guān)鍵字如GROUP、ORDER關(guān)鍵字進(jìn)行識別,將它們對應(yīng)的字段增加至查詢請求的查詢字段范圍中,然后將查詢請求發(fā)給各分布式數(shù)據(jù)服務(wù)器,這樣,可以從各分布式數(shù)據(jù)服務(wù)器中獲取到復(fù)雜操作關(guān)鍵字所限定字段的數(shù)據(jù),從而可以進(jìn)一步基于這些數(shù)據(jù)完成復(fù)雜的查詢處理操作。
[0017]圖1為本發(fā)明實(shí)施例一的流程示意圖,如圖1所示,該實(shí)施例主要包括:
[0018]步驟101、客戶端向數(shù)據(jù)庫應(yīng)用服務(wù)器發(fā)送數(shù)據(jù)查詢命令。
[0019]這里,所述數(shù)據(jù)庫應(yīng)用服務(wù)器就是直接對外提供數(shù)據(jù)庫應(yīng)用服務(wù)的服務(wù)器。本步驟的具體實(shí)現(xiàn)方法同現(xiàn)有系統(tǒng),在此不再贅述。
[0020]步驟102、所述數(shù)據(jù)庫應(yīng)用服務(wù)器對所述數(shù)據(jù)查詢命令進(jìn)行優(yōu)化,其中,當(dāng)所述數(shù)據(jù)查詢命令包含預(yù)設(shè)的復(fù)雜操作關(guān)鍵字時,優(yōu)化后的數(shù)據(jù)查詢命令的查詢字段范圍內(nèi)包含所述復(fù)雜操作關(guān)鍵字在所述數(shù)據(jù)查詢命令中對應(yīng)的字段。
[0021]具體地,所述復(fù)雜操作關(guān)鍵字包括分組(GROUP)和排序(ORDER)。此種情況下,較佳地,可通過下述步驟實(shí)現(xiàn)上述優(yōu)化:
[0022]步驟1021、對所述數(shù)據(jù)查詢命令進(jìn)行解析,得到相應(yīng)的語法樹。
[0023]這里,具體的解析方法為本領(lǐng)域技術(shù)人員所掌握,在此不再贅述。
[0024]步驟1022、將所述語法樹中查詢(select)關(guān)鍵字后的查詢字段范圍保存在查詢列表中。
[0025]這里,利用一中間存儲參數(shù)(即查詢列表)來保存當(dāng)前查詢的查詢字段范圍,以便后續(xù)步驟中基于此參數(shù)判斷是否需要將復(fù)雜操作關(guān)鍵字對應(yīng)的字段增加到查詢字段范圍內(nèi)。
[0026]步驟1023、遍歷所述語法樹確定是否存在GROUP關(guān)鍵字,如果存在,則判斷所述GROUP關(guān)鍵字后的分組字段是否存在于所述查詢列表中,如果不存在,則將所述GROUP關(guān)鍵字后的分組字段增加到所述查詢列表和所述語法樹中查詢字段的尾部。
[0027]本步驟用于把GROUP關(guān)鍵字所對應(yīng)的分組字段增加到查詢字段范圍內(nèi),以便此后分布式數(shù)據(jù)服務(wù)器基于優(yōu)化后的查詢命令,將GROUP關(guān)鍵字對應(yīng)的分組字段的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫應(yīng)用服務(wù)器,以使數(shù)據(jù)庫應(yīng)用服務(wù)器可以基于這些數(shù)據(jù)進(jìn)行相應(yīng)的分組查詢操作。[0028]步驟1024、遍歷所述語法樹確定是否存在ORDER關(guān)鍵字,如果存在,則判斷所述ORDER關(guān)鍵字后的排序字段是否存在于所述查詢列表中,如果不存在,則將所述ORDER關(guān)鍵字后的排序字段增加到所述查詢列表和所述語法樹中查詢字段的尾部。
[0029]本步驟用于把ORDER關(guān)鍵字所對應(yīng)的排序字段增加到查詢字段范圍內(nèi),以便此后分布式數(shù)據(jù)服務(wù)器基于優(yōu)化后的查詢命令,將ORDER關(guān)鍵字對應(yīng)的排序字段的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫應(yīng)用服務(wù)器,以使數(shù)據(jù)庫應(yīng)用服務(wù)器可以基于這些數(shù)據(jù)進(jìn)行相應(yīng)的排序查詢操作。
[0030]步驟1025、根據(jù)當(dāng)前的所述語法樹,得到所述優(yōu)化后的數(shù)據(jù)查詢命令。
[0031]本步驟用于將優(yōu)化后的語法樹轉(zhuǎn)化為相應(yīng)的查詢命令,以供分布式數(shù)據(jù)服務(wù)器基于此命令,將復(fù)雜查詢操作所需要的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫應(yīng)用服務(wù)器。
[0032]這里,根據(jù)語法樹得到查詢命令的具體方法為本領(lǐng)技術(shù)人員所掌握,在此不再贅述。
[0033]步驟103、所述數(shù)據(jù)庫應(yīng)用服務(wù)器將所述優(yōu)化后的數(shù)據(jù)查詢命令發(fā)送給存儲相應(yīng)數(shù)據(jù)的分布式數(shù)據(jù)服務(wù)器,所述分布式數(shù)據(jù)服務(wù)器將自身保存的所述優(yōu)化后的數(shù)據(jù)查詢命令中所述查詢字段范圍對應(yīng)的數(shù)據(jù)發(fā)送給所述數(shù)據(jù)庫應(yīng)用服務(wù)器。
[0034]步驟104、所述數(shù)據(jù)庫應(yīng)用服務(wù)器按照所述優(yōu)化前的數(shù)據(jù)查詢命令,對接收自所述分布式數(shù)據(jù)服務(wù)器的數(shù)據(jù)進(jìn)行查詢處理,并將所述查詢處理結(jié)果反饋給所述客戶端。
[0035]本步驟中,由于各分布式數(shù)據(jù)服務(wù)器返回的數(shù)據(jù)中將包含用于復(fù)雜查詢操作的數(shù)據(jù),因此,數(shù)據(jù)庫應(yīng)用服務(wù)器可以基于接收到的這些數(shù)據(jù)進(jìn)行復(fù)雜的查詢操作(如分組、排序等)處理。
[0036]這里,將所述查詢處理結(jié)果反饋給所述客戶端的具體方法為本領(lǐng)域技術(shù)人員所掌握,在此不再贅述。
[0037]綜上所述,以上僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種數(shù)據(jù)查詢方法,其特征在于,包括: a、客戶端向數(shù)據(jù)庫應(yīng)用服務(wù)器發(fā)送數(shù)據(jù)查詢命令; b、所述數(shù)據(jù)庫應(yīng)用服務(wù)器對所述數(shù)據(jù)查詢命令進(jìn)行優(yōu)化,其中,當(dāng)所述數(shù)據(jù)查詢命令包含預(yù)設(shè)的復(fù)雜操作關(guān)鍵字時,優(yōu)化后的數(shù)據(jù)查詢命令的查詢字段范圍內(nèi)包含所述復(fù)雜操作關(guān)鍵字在所述數(shù)據(jù)查詢命令中對應(yīng)的字段; C、所述數(shù)據(jù)庫應(yīng)用服務(wù)器將所述優(yōu)化后的數(shù)據(jù)查詢命令發(fā)送給存儲相應(yīng)數(shù)據(jù)的分布式數(shù)據(jù)服務(wù)器,所述分布式數(shù)據(jù)服務(wù)器將自身保存的所述優(yōu)化后的數(shù)據(jù)查詢命令中所述查詢字段范圍對應(yīng)的數(shù)據(jù)發(fā)送給所述數(shù)據(jù)庫應(yīng)用服務(wù)器; d、所述數(shù)據(jù)庫應(yīng)用服務(wù)器按照所述優(yōu)化前的數(shù)據(jù)查詢命令,對接收自所述分布式數(shù)據(jù)服務(wù)器的數(shù)據(jù)進(jìn)行查詢處理,并將所述查詢處理結(jié)果反饋給所述客戶端。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述復(fù)雜操作關(guān)鍵字包括分組GROUP和排序 ORDER。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,步驟b中的所述優(yōu)化包括: 對所述數(shù)據(jù)查詢命令進(jìn)行解析,得到相應(yīng)的語法樹; 將所述語法樹中查詢select關(guān)鍵字后的查詢字段范圍保存在查詢列表中; 遍歷所述語法樹確定是否存在GROUP關(guān)鍵字,如果存在,則判斷所述GROUP關(guān)鍵字后的分組字段是否存在于所述查詢列表中,如果不存在,則將所述GROUP關(guān)鍵字后的分組字段增加到所述查詢列表和所述語法樹中查詢字段的尾部; 遍歷所述語法樹確定是否存在ORDER關(guān)鍵字,如果存在,則判斷所述ORDER關(guān)鍵字后的排序字段是否存在于所述查詢列表中,如果不存在,則將所述ORDER關(guān)鍵字后的排序字段增加到所述查詢列表和所述語法樹中查詢字段的尾部; 根據(jù)當(dāng)前的所述語法樹,得到所述優(yōu)化后的數(shù)據(jù)查詢命令。
【文檔編號】G06F17/30GK104008191SQ201410260746
【公開日】2014年8月27日 申請日期:2014年6月12日 優(yōu)先權(quán)日:2014年6月12日
【發(fā)明者】唐超, 馬麗偉, 秦波, 王 鋒, 趙曉平 申請人:北京京東尚科信息技術(shù)有限公司, 北京京東世紀(jì)貿(mào)易有限公司