U,以及除該CPU之外的其它類型的處理芯片;
[0032]S120,生成該查詢語句對應的有向無環(huán)圖DAG,該DAG包括多個節(jié)點,該多個節(jié)點中的每個節(jié)點對應該查詢語句中的一個查詢操作,該DAG中的各節(jié)點之間的連接關(guān)系用于指示該各節(jié)點對應的查詢操作之間的依賴關(guān)系;
[0033]S130,從該數(shù)據(jù)庫中獲取執(zhí)行該DAG中的節(jié)點對應的查詢操作所需的原始數(shù)據(jù);
[0034]S140,基于該DAG和該原始數(shù)據(jù),執(zhí)行該DAG中的節(jié)點對應的查詢操作,得到查詢結(jié)果,其中該DAG中的至少部分節(jié)點對應的查詢操作由該處理芯片執(zhí)行;
[0035]S150,將該查詢結(jié)果返回該數(shù)據(jù)庫。
[0036]在本發(fā)明實施例中,在獲取數(shù)據(jù)庫的查詢語句之后,生成該查詢語句對應的DAG,該DAG中的節(jié)點對應查詢語句中的查詢操作?;谠揇AG,利用CPU和處理芯片執(zhí)行DAG中節(jié)點對應的查詢操作,從而利用DAG架構(gòu)執(zhí)行查詢語句中包含的查詢操作,能夠細粒度的向處理器分配操作任務,提高了查詢數(shù)據(jù)庫的效率。
[0037]應理解,本發(fā)明實施例中,對上述處理芯片的類型不作限定,該處理芯片可以為圖形處理器(Graphics Processing Unit,GPU)、現(xiàn)場可編程門陣列(Field ProgrammableGate Array,F(xiàn)PGA)、數(shù)字信號處理器(Digital Signal Processor,DSP)或者其他可以應用于終端的處理器。應理解,本發(fā)明實施例中,終端可以包括一個處理芯片,也可以包括多個處理芯片。該多個處理芯片可以是同一類型,也可以是不同類型,本發(fā)明不限于此。例如,該處理芯片可以包括GPU以及DSP。
[0038]應理解,上述數(shù)據(jù)庫的查詢語句可以為用于向數(shù)據(jù)庫查詢數(shù)據(jù)庫的語句,執(zhí)行主體在獲取該查詢語句之后,經(jīng)過相應的查詢操作,可以向數(shù)據(jù)庫返回相應的查詢結(jié)果。可選地,本發(fā)明實施例對上述查詢語句的格式不作限定,例如,查詢語句可以是結(jié)構(gòu)化查詢語言((Structured Query Language,SQL),也可以是其他格式的用于查詢數(shù)據(jù)庫的語言。
[0039]應理解,本發(fā)明實施例中的有向無環(huán)圖(Directed Acyclic Graph,DAG)可以指現(xiàn)有技術(shù)中的有向無環(huán)圖,其可以表示一個無法從某個頂點出發(fā)經(jīng)過若干條邊回到該點的有向圖。本發(fā)明實施例對于生成該查詢語句對應的DAG的方式不作限定。例如,可以根據(jù)將查詢語句中的查詢操作轉(zhuǎn)換為操作節(jié)點,分析各個操作節(jié)點之間的輸入輸出關(guān)系,從而構(gòu)建節(jié)點之間的數(shù)據(jù)依賴關(guān)系,最終形成DAG。
[0040]可選地,執(zhí)行該DAG中的節(jié)點對應的查詢操作,可以是利用CPU以及處理芯片一起執(zhí)行該查詢操作,也可以是只利用處理芯片執(zhí)行DAG中的節(jié)點對應的操作。例如,該處理芯片可以包括GPU,在根據(jù)該查詢語句生成DAG之后,可以分析DAG中的節(jié)點對應的查詢操作的類型,將適合GPU處理的節(jié)點分配給GPU執(zhí)行,將適合CPU處理的節(jié)點分配給CPU執(zhí)行。又例如,DAG中的節(jié)點對應的查詢操作類型可以包括過濾、排序、轉(zhuǎn)換等查詢操作,其中過濾和轉(zhuǎn)換的操作適合GPU執(zhí)行,可以將該操作分配給GPU執(zhí)行,而排序的操作適合CPU執(zhí)行,可以將該操作分配給CPU執(zhí)行。從而通過分析DAG圖,細粒度的向CPU以及GPU分配節(jié)點對應的查詢操作,提高了 GPU的利用率以及查詢數(shù)據(jù)庫的效率。
[0041]例如,為了便于理解,圖2示出了根據(jù)本發(fā)明實施例的查詢數(shù)據(jù)庫的裝置的具體實施例的架構(gòu)示意圖,如圖2所示,該執(zhí)行該查詢數(shù)據(jù)庫的架構(gòu)可以包括數(shù)據(jù)庫、DAG解釋器、調(diào)度器、執(zhí)行器以及數(shù)據(jù)通信器。其中,數(shù)據(jù)庫可以用于接收用戶輸入的查詢命令以及輸出對應的查詢結(jié)果,數(shù)據(jù)庫還可以用于將用戶輸入的查詢命令轉(zhuǎn)換成查詢語句(例如,SQL語句)并輸出到DAG解釋器中。DAG解釋器用于將查詢語句生成DAG,調(diào)度器用于分析DAG中的節(jié)點,將不同的節(jié)點分配給CPU或者處理芯片處理,執(zhí)行器可以用于根據(jù)調(diào)度器的分配,利用CPU和處理芯片執(zhí)行處理DAG中的節(jié)點的具體過程,數(shù)據(jù)通信器可以用于和數(shù)據(jù)庫之間的數(shù)據(jù)交換,例如,數(shù)據(jù)通信器可以根據(jù)執(zhí)行器的調(diào)度,從數(shù)據(jù)庫中獲取執(zhí)行過程中需要的原始數(shù)據(jù)以及向數(shù)據(jù)庫返回執(zhí)行器的查詢結(jié)果。
[0042]又例如,為了便于理解,圖3示出了根據(jù)本發(fā)明實施例的查詢數(shù)據(jù)庫的方法的數(shù)據(jù)流向示意圖。如圖3所示,在執(zhí)行DAG中的節(jié)點對應的查詢操作的過程中,執(zhí)行器可以通過圖2所示的數(shù)據(jù)通信器將原始數(shù)據(jù)從數(shù)據(jù)庫中讀出。該數(shù)據(jù)庫可以位于終端的內(nèi)部數(shù)據(jù)存儲模塊之中,基于原始數(shù)據(jù),執(zhí)行器執(zhí)行DAG中的節(jié)點對應的查詢操作之后(例如,可以對原始數(shù)據(jù)進行排序、過濾等操作),將執(zhí)行節(jié)點對應的查詢操作后的結(jié)果分批或一次性返回至數(shù)據(jù)通信器,在DAG中的所有節(jié)點對應的查詢操作都執(zhí)行完之后,可以將最終的查詢結(jié)果返回到數(shù)據(jù)庫。
[0043]可選地,作為一個實施例,本發(fā)明實施例的查詢數(shù)據(jù)庫的方法100中,該處理芯片適于并行處理,該基于該DAG和該原始數(shù)據(jù),執(zhí)行該DAG中的節(jié)點對應的查詢操作,包括:從該DAG中確定至少一個目標節(jié)點,該至少一個目標節(jié)點中的每個目標節(jié)點對應的查詢操作適于進行并行處理;基于該DAG和該原始數(shù)據(jù),利用該處理芯片對該每個目標節(jié)點對應的查詢操作進行并行處理;利用該CPU執(zhí)行該DAG中的除該目標節(jié)點之外的節(jié)點對應的查詢操作。
[0044]可選地,本發(fā)明實施例中,處理芯片可以是適于并行處理的芯片,例如,該適于并行處理的處理芯片可以是GPU、FPGA、DSP。其中適于并行處理可以指該處理芯片能夠采用并行加速的方法處理節(jié)點對應的查詢操作。其中采用并行加速的方法處理節(jié)點對應的查詢操作,可以指對單個節(jié)點對應的查詢操作進行并行處理,也可以指對多個節(jié)點對應的查詢操作進行并行處理。根據(jù)不同節(jié)點對應的查詢操作的類型不同,處理芯片適合對某些類型的查詢操作進行加速,例如,所述處理芯片可以為GPU,當節(jié)點對應的查詢操作的類型不具有依賴關(guān)系(例如,過濾數(shù)據(jù))時,GPU適合對該節(jié)點進行并行加速處理;當節(jié)點對應的查詢操作的類型具有依賴關(guān)系(例如,排序)時,GPU不適合該節(jié)點進行并行加速處理,此時,可以由CPU執(zhí)行該節(jié)點對應的操作。從而通過分析DAG中的節(jié)點的類型,從DAG中的節(jié)點中確定目標節(jié)點,由處理芯片執(zhí)行目標節(jié)點對應的查詢操作,由CPU執(zhí)行除該目標節(jié)點之外其它節(jié)點對應的查詢操作,在執(zhí)行查詢數(shù)據(jù)庫的任務時,細粒度的分配DAG中的節(jié)點對應的操作任務,以提高處理芯片的利用率,同時提高了查詢數(shù)據(jù)庫的效率,減少了查詢數(shù)據(jù)庫的時間開銷。
[0045]可選地,作為一個實施例,本發(fā)明實施例的查詢數(shù)據(jù)庫的方法100中,從該DAG中確定至少一個目標節(jié)點,該至少一個目標節(jié)點中的每個目標節(jié)點對應的查詢操作適于進行并行處理,包括:確定該DAG中的多個節(jié)點中的每個節(jié)點對應的查詢操作的依賴關(guān)系;將不具有依賴關(guān)系的查詢操作對應的節(jié)點確定為該目標節(jié)點。
[0046]例如,當DAG中的節(jié)點對應的查詢操作為過濾、讀取數(shù)據(jù)等類型時,適于并行執(zhí)行該查詢操作,可以將該查詢操作對應的節(jié)點確定為目標節(jié)點。當DAG中的節(jié)點對應的查詢操作為排序、合并等類型時,該查詢操作具有依賴關(guān)系,不適于并行執(zhí)行該查詢操作。可以將該查詢操作對應的節(jié)點交由CPU處理。
[0047]又例如,圖4示出了根據(jù)本發(fā)明實施例的查詢數(shù)據(jù)庫的方法的具體實施例的示意圖,該具體實施例可以應用于移動設備中的查詢嵌入式數(shù)據(jù)庫(例如,SQLite)中。該移動設備中可以包括CPU以及GPU,如圖4所示,查詢語句可以為select name from contactswhere_id > 9order by sort_key,其表示從通訊錄中選取出標識> 9的聯(lián)系人的名稱,并按關(guān)鍵字的順序排列??梢詫⒃摬樵冋Z句轉(zhuǎn)換成DAG,該DAG可以包括五個節(jié)點,該五個節(jié)點依次是源(Source)節(jié)點、投影(Project1n)節(jié)點、表達式(Express1n)節(jié)點、排序(Sort)節(jié)點、結(jié)果(Result)節(jié)點。該五個節(jié)點之間的依賴關(guān)系為從下到上依次進行處理的關(guān)系,也即該五個節(jié)點互相之間存在依賴關(guān)系。其中Source節(jié)點和Project1n節(jié)點對應的查詢操作用于從數(shù)據(jù)庫中獲取數(shù)據(jù)(在通訊錄中與名稱、標識、關(guān)鍵字等對應的數(shù)據(jù)),Express1n節(jié)點對應的查詢操作用于where表達式(where_id > 9)對應的數(shù)據(jù)的過濾,Sort節(jié)點對應的查詢操作用于按照關(guān)鍵字對數(shù)據(jù)進行排序(order by sort key),Result節(jié)點對應的查詢操作用于收集排序好的數(shù)據(jù)并返回到數(shù)據(jù)庫。在對DAG中的節(jié)點對應的查詢操作類型進行分析的過程中,由于Source節(jié)點、Project1n節(jié)點和Express1n節(jié)點對應的查詢操作不具有依賴關(guān)系,所以可以利用GPU分別對以上三個節(jié)點對應的查詢操作進行并行處理。應理解,本發(fā)明實施例中,Source節(jié)點、Project1n節(jié)點以及Express1n三個節(jié)點互