相之間存在依賴(lài)關(guān)系,所以該三個(gè)節(jié)點(diǎn)不能同時(shí)處理,但是該三個(gè)節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的查詢操作不存在依賴(lài)關(guān)系,所以可以對(duì)該三個(gè)節(jié)點(diǎn)對(duì)應(yīng)的查詢操作分別進(jìn)行并行處理。Sort節(jié)點(diǎn)對(duì)應(yīng)的查詢操作具有依賴(lài)關(guān)系,所以利用CPU對(duì)Sort節(jié)點(diǎn)對(duì)應(yīng)的查詢操作進(jìn)行處理,進(jìn)一步地,可以利用CPU多線程執(zhí)行Sort節(jié)點(diǎn)對(duì)應(yīng)的查詢操作。
[0048]可選地,作為一個(gè)實(shí)施例,本發(fā)明實(shí)施例中的查詢數(shù)據(jù)庫(kù)的方法100中,基于該DAG和該原始數(shù)據(jù),執(zhí)行該DAG中的節(jié)點(diǎn)對(duì)應(yīng)的查詢操作,包括:確定該DAG中的節(jié)點(diǎn)之間是否存在依賴(lài)關(guān)系;并行執(zhí)行該DAG中互相不存在依賴(lài)關(guān)系的節(jié)點(diǎn)對(duì)應(yīng)的查詢操作。
[0049]例如,在DAG中,如果多個(gè)節(jié)點(diǎn)之間沒(méi)有邊相連,則表示該多個(gè)節(jié)點(diǎn)之間不存在互相依賴(lài)關(guān)系,可以并行處理該多個(gè)節(jié)點(diǎn)對(duì)應(yīng)的查詢操作。從而通過(guò)并行處理多個(gè)不存在依賴(lài)關(guān)系的節(jié)點(diǎn)對(duì)應(yīng)的查詢操作,減少查詢數(shù)據(jù)庫(kù)的時(shí)間開(kāi)銷(xiāo),提高查詢數(shù)據(jù)庫(kù)的效率。
[0050]又例如,作為一個(gè)具體實(shí)施例,終端可以包括CPU和GPU,當(dāng)終端獲取數(shù)據(jù)庫(kù)的查詢語(yǔ)句之后,可以分析該查詢語(yǔ)句,判斷本次查詢的涉及的數(shù)據(jù)量是否大于第一閾值,當(dāng)本次查詢的數(shù)量小于第一閾值時(shí),則表示本次涉及的數(shù)據(jù)量較小,而進(jìn)行并行加速會(huì)占用一定的資源消耗,當(dāng)處理的數(shù)據(jù)量較小時(shí),該資源消耗在整體資源中占用的比例較大,硬件利用率較低,此時(shí)沒(méi)有必要進(jìn)行并行加速,故可以采用CPU單線程執(zhí)行查詢操作。當(dāng)本次查詢涉及的數(shù)據(jù)量大于第一閾值時(shí),則表示本次涉及的數(shù)據(jù)量較大,有必要進(jìn)行并行加速。然后可以判斷由查詢語(yǔ)句生成的DAG中的節(jié)點(diǎn)之間的依賴(lài)關(guān)系,采用并行處理的策略處理互相之間沒(méi)有依賴(lài)關(guān)系的節(jié)點(diǎn)。還可以進(jìn)一步判斷DAG中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的查詢操作是否具有依賴(lài)關(guān)系,將其中具有依賴(lài)關(guān)系的查詢操作對(duì)應(yīng)的節(jié)點(diǎn)分配給CPU進(jìn)行多線程處理,將其中不具有依賴(lài)關(guān)系的查詢操作對(duì)應(yīng)的節(jié)點(diǎn)分配給GPU進(jìn)行并行加速處理。以提高查詢數(shù)據(jù)庫(kù)的效率。
[0051]又例如,圖5是根據(jù)本發(fā)明實(shí)施例的查詢數(shù)據(jù)庫(kù)的方法的另一具體實(shí)施例的示意圖。該具體實(shí)施例可以應(yīng)用于移動(dòng)設(shè)備中的查詢嵌入式數(shù)據(jù)庫(kù)(例如,SQLite)中。該移動(dòng)設(shè)備中可以包括CPU以及GPU,如圖5所示,查詢語(yǔ)句可以為將聯(lián)系人視圖表與聚合表按照相應(yīng)標(biāo)識(shí)相等的條件進(jìn)行左連接,并輸出查詢結(jié)果??梢詫⒃摬樵冋Z(yǔ)句轉(zhuǎn)換成DAG,該DAG可以包括第一源節(jié)點(diǎn)、第二源節(jié)點(diǎn)、第一投影節(jié)點(diǎn)、第二投影節(jié)點(diǎn)、左連接節(jié)點(diǎn)以及結(jié)果節(jié)點(diǎn)。其中第一源節(jié)點(diǎn)和第一投影節(jié)點(diǎn)對(duì)應(yīng)的查詢操作用于從數(shù)據(jù)庫(kù)中獲取聯(lián)系人視圖對(duì)應(yīng)的數(shù)據(jù),第二源節(jié)點(diǎn)和第二投影節(jié)點(diǎn)對(duì)應(yīng)的查詢操作用于從數(shù)據(jù)庫(kù)中獲取聚合表對(duì)應(yīng)的數(shù)據(jù)。左連接節(jié)點(diǎn)對(duì)應(yīng)的查詢操作用于根據(jù)指定的連接條件將兩個(gè)表進(jìn)行合并操作,合并生成的表單包括原先兩個(gè)表的所有滿足連接條件的數(shù)據(jù);其中,如圖5所示,第一源節(jié)點(diǎn)和第二源節(jié)點(diǎn)之間沒(méi)有依賴(lài)關(guān)系,所以可以采用并行處理的方法同時(shí)處理第一源節(jié)點(diǎn)和第二源節(jié)點(diǎn)對(duì)應(yīng)的查詢操作;同理,第一投影節(jié)點(diǎn)和第二投影節(jié)點(diǎn)之間也沒(méi)有依賴(lài)關(guān)系,也可以采用并行處理的方法同時(shí)處理第一投影節(jié)點(diǎn)和第二投影節(jié)點(diǎn)對(duì)應(yīng)的查詢操作。另外,第一源節(jié)點(diǎn)、第二源節(jié)點(diǎn)、第一投影節(jié)點(diǎn)以及第二投影節(jié)點(diǎn)對(duì)應(yīng)的查詢操作不具有依賴(lài)關(guān)系,可以采用GPU并行處理以上每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的查詢操作。而左連接節(jié)點(diǎn)對(duì)應(yīng)的查詢操作需要將第一張表的當(dāng)前數(shù)據(jù)與另一張表的所有數(shù)據(jù)進(jìn)行比對(duì),因此存在依賴(lài)關(guān)系,無(wú)法用GPU進(jìn)行并行加速,因而可以采用CPU處理左連接節(jié)點(diǎn)對(duì)應(yīng)的查詢操作。以提高處理器的利用率以及查詢數(shù)據(jù)庫(kù)的效率。
[0052]上文結(jié)合圖1至圖5詳細(xì)闡述了本發(fā)明實(shí)施例的查詢數(shù)據(jù)庫(kù)的方法的具體實(shí)施例,下文將結(jié)合圖6和圖7,詳細(xì)描述本發(fā)明實(shí)施例的查詢數(shù)據(jù)庫(kù)的裝置。
[0053]圖6示出了本發(fā)明實(shí)施例的查詢數(shù)據(jù)庫(kù)的裝置600的示意圖,應(yīng)理解,本發(fā)明實(shí)施例中的裝置600可以對(duì)應(yīng)于執(zhí)行根據(jù)本發(fā)明實(shí)施例的方法中的相應(yīng)主體,并且裝置600中的各個(gè)模塊的下述和其它操作和/或功能分別為了實(shí)現(xiàn)圖1至圖5中各個(gè)方法的相應(yīng)流程,為了簡(jiǎn)潔,在此不在贅述。該裝置600包括:
[0054]獲取模塊610,用于獲取數(shù)據(jù)庫(kù)的查詢語(yǔ)句,該數(shù)據(jù)庫(kù)為終端內(nèi)的數(shù)據(jù)庫(kù),該查詢語(yǔ)句包括多個(gè)查詢操作,該終端包括中央處理器CPU,以及除該CPU之外的其它類(lèi)型的處理芯片;
[0055]生成模塊620,用于生成該查詢語(yǔ)句對(duì)應(yīng)的有向無(wú)環(huán)圖DAG,該DAG包括多個(gè)節(jié)點(diǎn),該多個(gè)節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)該查詢語(yǔ)句中的一個(gè)查詢操作,該DAG中的各節(jié)點(diǎn)之間的連接關(guān)系用于指示該各節(jié)點(diǎn)對(duì)應(yīng)的查詢操作之間的依賴(lài)關(guān)系;
[0056]數(shù)據(jù)模塊630,用于從該數(shù)據(jù)庫(kù)中獲取執(zhí)行該DAG中的節(jié)點(diǎn)對(duì)應(yīng)的查詢操作所需的原始數(shù)據(jù);
[0057]執(zhí)行模塊640,用于基于該DAG和該原始數(shù)據(jù),執(zhí)行該DAG中的節(jié)點(diǎn)對(duì)應(yīng)的查詢操作,得到查詢結(jié)果,其中該DAG中的至少部分節(jié)點(diǎn)對(duì)應(yīng)的查詢操作由該處理芯片執(zhí)行;
[0058]返回模塊650,用于將該查詢結(jié)果返回該數(shù)據(jù)庫(kù)。
[0059]在本發(fā)明實(shí)施例中,在獲取數(shù)據(jù)庫(kù)的查詢語(yǔ)句之后,生成該查詢語(yǔ)句對(duì)應(yīng)的DAG,該DAG中的節(jié)點(diǎn)對(duì)應(yīng)查詢語(yǔ)句中的查詢操作?;谠揇AG,利用CPU和處理芯片中的至少一個(gè)處理器執(zhí)行DAG中節(jié)點(diǎn)對(duì)應(yīng)的查詢操作,從而利用DAG架構(gòu)執(zhí)行查詢語(yǔ)句中包含的查詢操作,能夠細(xì)粒度的向處理器分配操作任務(wù),提高了查詢數(shù)據(jù)庫(kù)的效率。
[0060]可選地,作為一個(gè)實(shí)施例,該處理芯片適于并行處理,該執(zhí)行模塊640具體用于從該DAG中確定至少一個(gè)目標(biāo)節(jié)點(diǎn),該至少一個(gè)目標(biāo)節(jié)點(diǎn)中的每個(gè)目標(biāo)節(jié)點(diǎn)對(duì)應(yīng)的查詢操作適于進(jìn)行并行處理;基于該DAG和該原始數(shù)據(jù),利用該處理芯片對(duì)該每個(gè)目標(biāo)節(jié)點(diǎn)對(duì)應(yīng)的查詢操作進(jìn)行并行處理;利用該CPU執(zhí)行該DAG中的除該目標(biāo)節(jié)點(diǎn)之外的節(jié)點(diǎn)對(duì)應(yīng)的查詢操作。
[0061]可選地,作為一個(gè)實(shí)施例,該執(zhí)行模塊640具體用于:確定該DAG中的多個(gè)節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的查詢操作的依賴(lài)關(guān)系;將不具有依賴(lài)關(guān)系的查詢操作對(duì)應(yīng)的節(jié)點(diǎn)確定為該目標(biāo)節(jié)點(diǎn)。
[0062]可選地,作為一個(gè)實(shí)施例,該執(zhí)行模塊640具體用于:確定該DAG中的節(jié)點(diǎn)之間是否存在依賴(lài)關(guān)系;并行執(zhí)行該DAG中互相不存在依賴(lài)關(guān)系的節(jié)點(diǎn)對(duì)應(yīng)的查詢操作。
[0063]可選地,作為一個(gè)實(shí)施例,該處理芯片包括以下處理芯片中的至少一種:GPU、現(xiàn)場(chǎng)可編程門(mén)陣列FPGA和數(shù)字信號(hào)處理器DSP。
[0064]可選地,作為一個(gè)實(shí)施例,該終端為移動(dòng)終端。
[0065]圖7示出了根據(jù)本發(fā)明實(shí)施例的查詢數(shù)據(jù)庫(kù)的裝置700的示意圖。如圖7所示,該裝置700包括:處理器710,存儲(chǔ)器720,總線系統(tǒng)730,該處理器710和該存儲(chǔ)器720通過(guò)該總線系統(tǒng)730相連,該存儲(chǔ)器720用于存儲(chǔ)指令,該處理器710用于執(zhí)行該存儲(chǔ)器720存儲(chǔ)的指令,以執(zhí)行查詢數(shù)據(jù)庫(kù)的任務(wù)。
[0066]該處理器710用于獲取數(shù)據(jù)庫(kù)的查詢語(yǔ)句,該數(shù)據(jù)庫(kù)為終端內(nèi)的數(shù)據(jù)庫(kù),該查詢語(yǔ)句包括多個(gè)查詢操作,該終端包括中央處理器CPU,以及除該CPU之外的其它類(lèi)型的處理芯片;生成該查詢語(yǔ)句對(duì)應(yīng)的有向無(wú)環(huán)圖DAG,該DAG包括多個(gè)節(jié)點(diǎn),該多個(gè)節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)該查詢語(yǔ)句中的一個(gè)查詢操作,該DAG中的各節(jié)點(diǎn)之間的連接關(guān)系用于指示該各節(jié)點(diǎn)對(duì)應(yīng)的查詢操作之間的依賴(lài)關(guān)系;從該數(shù)據(jù)庫(kù)中獲取執(zhí)行該DAG中的節(jié)點(diǎn)對(duì)應(yīng)的查詢操作所需的原始數(shù)據(jù);基于該DAG和該原始數(shù)據(jù),執(zhí)行該DAG中的節(jié)點(diǎn)對(duì)應(yīng)的查詢操作,得到查詢結(jié)果,其中該DAG中的至少部分節(jié)點(diǎn)對(duì)應(yīng)的查詢操作由該處理芯片執(zhí)行;將該查詢結(jié)果返回該數(shù)據(jù)庫(kù)。
[0067]在本發(fā)明實(shí)施例中,在獲取數(shù)據(jù)庫(kù)的查詢語(yǔ)句之后,生成該查詢語(yǔ)句對(duì)應(yīng)的DAG,該DAG中的節(jié)點(diǎn)對(duì)應(yīng)查詢語(yǔ)句中的查詢操作?;谠揇AG,利用CPU和處理芯片中的至少一個(gè)處理器執(zhí)行DAG中節(jié)點(diǎn)對(duì)應(yīng)的查詢操作,從而利用DAG架構(gòu)執(zhí)行查詢語(yǔ)句中包含的查詢操作,能夠細(xì)粒度的向處理器分配操作任務(wù),提高了查詢數(shù)據(jù)庫(kù)的效率。
[0068]可選地,作為一個(gè)實(shí)施例,該處理芯片適于并行處理,該處理器710具體用于從該DAG中確定至少一個(gè)目標(biāo)節(jié)點(diǎn),該至少一個(gè)目標(biāo)節(jié)點(diǎn)中的每個(gè)目標(biāo)節(jié)點(diǎn)對(duì)應(yīng)的查詢操作適于進(jìn)行并行處理;基于該DAG和該原始數(shù)據(jù),利用該處理芯片對(duì)該每個(gè)目標(biāo)節(jié)點(diǎn)對(duì)應(yīng)的查詢操作進(jìn)行并行處理;利用該CPU執(zhí)行該DAG中的除該目標(biāo)節(jié)點(diǎn)之外的節(jié)點(diǎn)對(duì)應(yīng)的查詢操作。
[0069]可選地,作為一個(gè)實(shí)施例,該處理器710具體用于確定該DAG中的多個(gè)節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的查詢操作的依賴(lài)關(guān)系;將不具有依賴(lài)關(guān)系的查詢操作對(duì)應(yīng)的節(jié)點(diǎn)確定為該目標(biāo)節(jié)點(diǎn)。
[0070]可選地,作為一個(gè)實(shí)施例,該處理器710具體用于確定該DAG中的節(jié)點(diǎn)之間是否存在依賴(lài)關(guān)系;并行執(zhí)行該DAG中互相不存在依賴(lài)關(guān)系的節(jié)點(diǎn)對(duì)應(yīng)的查詢操作。
[0071]可選地,作為一個(gè)實(shí)施例,該處理芯片包括以下處理芯片中的至少一種:GPU、現(xiàn)場(chǎng)可編程門(mén)陣列FPGA和數(shù)字信號(hào)處理器DSP。
[0072]可選地,作為一個(gè)