本申請涉及數(shù)據(jù)查詢技術(shù),更具體地,涉及數(shù)據(jù)查詢方法及裝置。
背景技術(shù):
數(shù)據(jù)查詢,是在大量的數(shù)據(jù)文件中,查詢符合某種條件的目標(biāo)數(shù)據(jù)。例如,審計活動中,審計人員在海量金融記錄的數(shù)據(jù)文件中,查詢特定用戶的金融記錄。
現(xiàn)有的查詢方法是,將全部的數(shù)據(jù)文件讀取到內(nèi)存中,對數(shù)據(jù)文件逐行判斷,以查找目標(biāo)數(shù)據(jù)。該種數(shù)據(jù)查詢方法查詢效率較低。
技術(shù)實現(xiàn)要素:
有鑒于此,本申請?zhí)峁┝艘环N數(shù)據(jù)查詢方法,用以提高數(shù)據(jù)查詢效率。另外,本申請還提供了一種數(shù)據(jù)查詢裝置,用以保證所述方法在實際中的應(yīng)用及實現(xiàn)。
為實現(xiàn)所述目的,本申請?zhí)峁┑募夹g(shù)方案如下:
一種數(shù)據(jù)查詢方法,包括:
接收到數(shù)據(jù)查詢請求后,提取所述數(shù)據(jù)查詢請求中的關(guān)鍵字;
使用預(yù)先建立的索引文件,查詢與所述關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片;其中,所述數(shù)據(jù)分片中包含至少一個數(shù)據(jù)單元;
在所述數(shù)據(jù)分片中,查詢包含所述關(guān)鍵字的數(shù)據(jù)單元。
可選地,所述索引文件的建立步驟包括:
將數(shù)據(jù)文件分割為多個數(shù)據(jù)分片;
對所述數(shù)據(jù)分片進行分詞操作,獲得多個單詞;
對所述多個單詞進行去重操作后,建立去重后的單詞與對應(yīng)數(shù)據(jù)分片的索引關(guān)系。
可選地,所述數(shù)據(jù)分片內(nèi)包含多個數(shù)據(jù)單元;相應(yīng)地,所述對所述數(shù)據(jù)分片進行分詞操作,獲得多個單詞,包括:
并行獲取每個所述數(shù)據(jù)分片,并按照以下步驟并行處理每個所述數(shù)據(jù)分片:
依次讀取所述數(shù)據(jù)分片的各個數(shù)據(jù)單元,對所述數(shù)據(jù)單元進行分詞操作后,獲得與所述數(shù)據(jù)分片對應(yīng)的多個單詞。
可選地,所述使用預(yù)先建立的索引文件,查詢與所述關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片,包括:
在預(yù)先建立的索引文件中,查詢與所述關(guān)鍵字相同的單詞;
確定與所述單詞具有索引關(guān)系的數(shù)據(jù)分片。
可選地,預(yù)先建立的索引文件為一個,且所述索引文件是多個數(shù)據(jù)文件的索引文件;所述數(shù)據(jù)查詢請求中包含數(shù)據(jù)文件標(biāo)識;
相應(yīng)地,在所述提取所述數(shù)據(jù)查詢請求中的關(guān)鍵字時,還包括:
提取所述數(shù)據(jù)查詢請求中的數(shù)據(jù)文件標(biāo)識;
在所述使用預(yù)先建立的索引文件,查詢與所述關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片之后,及所述在所述數(shù)據(jù)分片中,查詢包含所述關(guān)鍵字的數(shù)據(jù)單元之前,還包括:
在所述數(shù)據(jù)分片中,選擇與所述數(shù)據(jù)文件標(biāo)識對應(yīng)的數(shù)據(jù)分片。
可選地,預(yù)先建立的索引文件為多個,且不同的索引文件對應(yīng)不同的數(shù)據(jù)文件;所述數(shù)據(jù)查詢請求中包含數(shù)據(jù)文件標(biāo)識;
相應(yīng)地,在所述提取所述數(shù)據(jù)查詢請求中的關(guān)鍵字時,還包括:
提取所述數(shù)據(jù)查詢請求中的數(shù)據(jù)文件標(biāo)識;
所述使用預(yù)先建立的索引文件,查詢與所述關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片,包括:
在多個所述索引文件中,選擇與所述數(shù)據(jù)文件標(biāo)識對應(yīng)的索引文件;
使用確定出的所述索引文件,查詢與所述關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片。
一種數(shù)據(jù)查詢裝置,包括:
關(guān)鍵字提取單元,用于接收到數(shù)據(jù)查詢請求后,提取所述數(shù)據(jù)查詢請求中的關(guān)鍵字;
數(shù)據(jù)分片查詢單元,用于使用預(yù)先建立的索引文件,查詢與所述關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片;其中,所述數(shù)據(jù)分片中包含至少一個數(shù)據(jù)單元;
數(shù)據(jù)單元查詢單元,用于在所述數(shù)據(jù)分片中,查詢包含所述關(guān)鍵字的數(shù)據(jù)單元。
可選地,數(shù)據(jù)查詢裝置還包括:索引文件建立單元,用于建立索引文件;
其中,在建立索引文件方面,所述索引文件建立單元具體用于:
將數(shù)據(jù)文件分割為多個數(shù)據(jù)分片;
對所述數(shù)據(jù)分片進行分詞操作,獲得多個單詞;
對所述多個單詞進行去重操作后,建立去重后的單詞與對應(yīng)數(shù)據(jù)分片的索引關(guān)系。
可選地,所述數(shù)據(jù)分片內(nèi)包含多個數(shù)據(jù)單元;相應(yīng)地,在所述對所述數(shù)據(jù)分片進行分詞操作,獲得多個單詞的方面,所述索引文件建立單元具體用于:
并行獲取每個所述數(shù)據(jù)分片,并按照以下步驟并行處理每個所述數(shù)據(jù)分片:
依次讀取所述數(shù)據(jù)分片的各個數(shù)據(jù)單元,對所述數(shù)據(jù)單元進行分詞操作后,獲得與所述數(shù)據(jù)分片對應(yīng)的多個單詞。
可選地,在所述使用預(yù)先建立的索引文件,查詢與所述關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片的方面,所述數(shù)據(jù)分片查詢單元具體用于:
在預(yù)先建立的索引文件中,查詢與所述關(guān)鍵字相同的單詞;
確定與所述單詞具有索引關(guān)系的數(shù)據(jù)分片。
可選地,預(yù)先建立的索引文件為一個,且所述索引文件是多個數(shù)據(jù)文件的索引文件;所述數(shù)據(jù)查詢請求中包含數(shù)據(jù)文件標(biāo)識;
相應(yīng)地,該裝置還包括:
數(shù)據(jù)文件標(biāo)識提取單元,用于在所述提取所述數(shù)據(jù)查詢請求中的關(guān)鍵字時,提取所述數(shù)據(jù)查詢請求中的數(shù)據(jù)文件標(biāo)識;
數(shù)據(jù)分片選擇單元,用于在所述使用預(yù)先建立的索引文件,查詢與所述關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片之后,及所述在所述數(shù)據(jù)分片中,查詢包含所述關(guān)鍵字的數(shù)據(jù)單元之前,在所述數(shù)據(jù)分片中,選擇與所述數(shù)據(jù)文件標(biāo)識對應(yīng)的數(shù)據(jù)分片。
可選地,預(yù)先建立的索引文件為多個,且不同的索引文件對應(yīng)不同的數(shù)據(jù)文件;所述數(shù)據(jù)查詢請求中包含數(shù)據(jù)文件標(biāo)識;
相應(yīng)地,該裝置還包括:
數(shù)據(jù)文件標(biāo)識提取單元,用于在所述提取所述數(shù)據(jù)查詢請求中的關(guān)鍵字時,提取所述數(shù)據(jù)查詢請求中的數(shù)據(jù)文件標(biāo)識;
在所述使用預(yù)先建立的索引文件,查詢與所述關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片的方面,所述數(shù)據(jù)分片查詢單元具體用于:
在多個所述索引文件中,選擇與所述數(shù)據(jù)文件標(biāo)識對應(yīng)的索引文件;
使用選擇出的所述索引文件,查詢與所述關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片。
由以上技術(shù)方案可知,本申請?zhí)峁┝艘环N數(shù)據(jù)查詢方法,在實施前,預(yù)先將數(shù)據(jù)文件分片,并確定數(shù)據(jù)分片中所包含的單詞,建立單詞與數(shù)據(jù)分片的索引文件,在實施中,接收到數(shù)據(jù)查詢請求后,提取其中的關(guān)鍵字,首先使用索引文件,定位包含關(guān)鍵字的數(shù)據(jù)分片,然后再在數(shù)據(jù)分片中,精細(xì)查詢包含關(guān)鍵字的數(shù)據(jù)單元。與現(xiàn)有方式相比,本申請并不需要將全部數(shù)據(jù)文件讀取至內(nèi)存中逐行查詢,查詢效率較高。
附圖說明
為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本申請?zhí)峁┑臄?shù)據(jù)查詢方法實施例1的流程圖;
圖2為本申請?zhí)峁┑慕⑺饕募牧鞒虉D;
圖3為本申請?zhí)峁┑臄?shù)據(jù)查詢方法實施例2的流程圖;
圖4為本申請?zhí)峁┑臄?shù)據(jù)查詢方法實施例3的流程圖;
圖5為本申請?zhí)峁┑臄?shù)據(jù)查詢裝置實施例1的結(jié)構(gòu)示意圖;
圖6為本申請?zhí)峁┑臄?shù)據(jù)查詢裝置實施例2的結(jié)構(gòu)示意圖;
圖7為本申請?zhí)峁┑臄?shù)據(jù)查詢裝置實施例3的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
為了方便理解本申請的技術(shù)方案,首先結(jié)合具體應(yīng)用場景對本申請進行說明。
一服務(wù)系統(tǒng)可以為大量用戶如1000個用戶提供虛擬機,虛擬機每天都會生成大量的日志文件,那么,該服務(wù)系統(tǒng)每天生成的日志文件可能達到數(shù)億行如50億行。若用戶想要查詢某條日志文件,現(xiàn)有的服務(wù)系統(tǒng)逐行讀取日志文件進行匹配,該種方式處理效率較低。
然而,本申請中,按照分片規(guī)模相近的原則預(yù)先對日志文件進行分片,獲得數(shù)據(jù)分片后,根據(jù)數(shù)據(jù)分片建立索引文件。索引文件記錄的是數(shù)據(jù)分片中的單詞與數(shù)據(jù)分片的對應(yīng)關(guān)系。
例如,日志文件的數(shù)據(jù)分片77中包含單詞“端口訪問警報”,則索引關(guān)系可以表示為“端口訪問警報--數(shù)據(jù)分片77”。若單詞“端口訪問警報”還出現(xiàn)在其他的數(shù)據(jù)分片如數(shù)據(jù)分片88中,則索引關(guān)系可以表示為“端口訪問警報--數(shù)據(jù)分片77+數(shù)據(jù)分片88”。
當(dāng)然,數(shù)據(jù)分片77中還包括其他單詞如“連接超時”,則索引文件中還包括“連接超時--數(shù)據(jù)分片77”的索引關(guān)系。
需要說明的是,以上示例中的橫線及加號僅僅是為了形象說明,在計算機中,并非使用此種方式表示索引關(guān)系。
服務(wù)系統(tǒng)建立索引文件后,便可以使用該索引文件進行數(shù)據(jù)查詢。
例如,服務(wù)系統(tǒng)接收到一數(shù)據(jù)查詢請求,該數(shù)據(jù)查詢請求中包含的關(guān)鍵字為“連接超時”,則根據(jù)索引文件,可以查詢到“連接超時”與數(shù)據(jù)分片77具有索引關(guān)系,因此,將數(shù)據(jù)分片77提取到內(nèi)存中。在內(nèi)存中,依次遍歷該數(shù)據(jù)分片77中的每一行日志,以查找具體包含該關(guān)鍵字的那個或那些行日志。
以上結(jié)合具體應(yīng)用場景對本申請的技術(shù)方案進行了說明,需要說明的是,本申請并不局限應(yīng)用于上述場景中。另外,以上應(yīng)用場景中的技術(shù)手段可以通過其他方式實現(xiàn)。
見圖1,其示出了本申請?zhí)峁┑臄?shù)據(jù)查詢方法實施例1的流程。如圖1所示,本實施例可以具體包括以下步驟S101~步驟S103。
步驟S101:提取數(shù)據(jù)查詢請求中的關(guān)鍵字。
其中,數(shù)據(jù)查詢請求中包含關(guān)鍵字,接收到數(shù)據(jù)查詢請求后,提取其中的關(guān)鍵字。以上述應(yīng)用場景為例,提取到的關(guān)鍵字為“連接超時”。
需要說明的是,關(guān)鍵字可以是一個,也可以是多個。
步驟S102:使用索引文件,查詢與關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片。
在實施前,預(yù)先建立有索引文件,索引文件中記錄的是單詞與數(shù)據(jù)分片的索引關(guān)系。提取到關(guān)鍵字后,在索引文件中,查找與關(guān)鍵字相同的單詞。然后,確定與該單詞具有索引關(guān)系的數(shù)據(jù)分片。
需要說明的是,若數(shù)據(jù)查詢請求中包含多個關(guān)鍵字,需要查詢與全部關(guān)鍵字均具有索引關(guān)系的數(shù)據(jù)分片。也就是說,查詢到的數(shù)據(jù)分片可以是一個,也可以是多個,但每個數(shù)據(jù)分片需要與全部的關(guān)鍵字均具有索引關(guān)系。
查詢到的數(shù)據(jù)分片中包含至少一個數(shù)據(jù)單元。數(shù)據(jù)單元的形式與數(shù)據(jù)分片的形式是相關(guān)的,或者,數(shù)據(jù)單元的形式與數(shù)據(jù)文件的形式是相關(guān)的。組成數(shù)據(jù)文件的基本單元便是數(shù)據(jù)單元。
例如,數(shù)據(jù)文件包含多張數(shù)據(jù)表,將數(shù)據(jù)表分片后得到的數(shù)據(jù)分片為數(shù)據(jù)表或數(shù)據(jù)表的一部分。組成數(shù)據(jù)表的基本單元是記錄,因此,數(shù)據(jù)表形式的數(shù)據(jù)分片的數(shù)據(jù)單元為記錄。
又如,數(shù)據(jù)文件包含多個日志文件,將日志文件分片后得到的數(shù)據(jù)分片為日志文件或日志文件的一部分。組成日志文件的基本單元是日志行,因此,日志文件形式的數(shù)據(jù)分片的數(shù)據(jù)單元為日志行。
步驟S103:在數(shù)據(jù)分片中,查詢包含所述關(guān)鍵字的數(shù)據(jù)單元。
具體地,可以將該數(shù)據(jù)分片讀取到內(nèi)存中進行精細(xì)查詢。
數(shù)據(jù)分片中包含多個數(shù)據(jù)單元,在數(shù)據(jù)單元中精細(xì)查詢,以查詢哪個數(shù)據(jù)單元包含該關(guān)鍵字。例如,在數(shù)據(jù)表形式的數(shù)據(jù)分片中,依次讀取各個記錄,并判斷記錄中是否包含關(guān)鍵字。需要說明的是,若數(shù)據(jù)查詢請求中包含多個關(guān)鍵字,需要查詢的是包含所有關(guān)鍵字的記錄。
由以上技術(shù)方案可知,本實施例提供的數(shù)據(jù)查詢方法,在實施前,預(yù)先將數(shù)據(jù)文件分片,并確定數(shù)據(jù)分片中所包含的單詞,建立單詞與數(shù)據(jù)分片的索引文件,在實施中,接收到數(shù)據(jù)查詢請求后,提取其中的關(guān)鍵字,首先使用索引文件,定位包含關(guān)鍵字的數(shù)據(jù)分片,然后在數(shù)據(jù)分片中,精細(xì)查詢包含關(guān)鍵字的數(shù)據(jù)單元。與現(xiàn)有方式相比,本申請并不需要將全部數(shù)據(jù)文件讀取至內(nèi)存中逐行查詢,查詢效率較高。本申請的優(yōu)勢在對海量數(shù)據(jù)文件的查詢過程中體現(xiàn)得較為明顯。
見圖2,其示出了索引文件的建立流程,具體包括步驟S201~步驟S203。
步驟S201:將數(shù)據(jù)文件分割為多個數(shù)據(jù)分片。
具體地,可以將數(shù)據(jù)文件切分為固定大小或可變大小的數(shù)據(jù)分片(表示分片規(guī)模相同或相近)。需要說明的是,切分時,需要保證每個數(shù)據(jù)分片中的數(shù)據(jù)單元是完整的。
例如,切分?jǐn)?shù)據(jù)表是,需要保證切分后的數(shù)據(jù)表中每一行記錄是完整的。
數(shù)據(jù)分片的表示方法可以是變量組,如變量組:
<F,Path,Desc,Mstart,Mend>。
其中,F(xiàn)表示數(shù)據(jù)文件的名稱,Path表示數(shù)據(jù)文件的存儲路徑,Desc表示數(shù)據(jù)文件的描述標(biāo)簽,Mstart表示數(shù)據(jù)分片的起始偏移地址,Mend表示數(shù)據(jù)分片的末尾偏移地址。
數(shù)據(jù)分片具有標(biāo)識,該表示具有唯一性。標(biāo)識的一種具體形式是編號,編號的生成方式可以是,在分割數(shù)據(jù)文件時,根據(jù)分割時間和/或分割得到的數(shù)據(jù)分片的內(nèi)容,計算得到唯一值,該唯一值作為數(shù)據(jù)分片的編號。
步驟S202:對數(shù)據(jù)分片進行分詞操作,獲得多個單詞。
數(shù)據(jù)分片為多個,為了提高分詞的效率,可以并行讀取各個數(shù)據(jù)分片,按照對每個數(shù)據(jù)分片均執(zhí)行以下分詞操作:
數(shù)據(jù)分片包含多個數(shù)據(jù)單元,逐行讀取數(shù)據(jù)單元并進行分詞,從而得到每個數(shù)據(jù)單元對應(yīng)的單詞。在數(shù)據(jù)分片為數(shù)據(jù)表的示例中,逐行讀取數(shù)據(jù)表每行的記錄,將記錄按列拆分為單詞。
這樣,數(shù)據(jù)分片會得到多個單詞,該多個單詞可以組成一個單詞集合。需要說明的是,每個數(shù)據(jù)分片具有各自對應(yīng)的單詞集合。
需要說明的是,根據(jù)實際需要,分詞操作獲得的每個單詞,并不一定均放入分詞集合中進行后續(xù)步驟S203。
或者,分詞操作獲得的單詞可以進行處理后才放入單詞集合。例如,若分詞為連續(xù)值,則可以使用函數(shù)將連續(xù)值影射為離散值,將該離散值放入單詞集合。
步驟S203:對多個單詞進行去重操作后,建立去重后的單詞與對應(yīng)數(shù)據(jù)分片的索引關(guān)系。
具體地,數(shù)據(jù)分片的單詞集合中可能包含重復(fù)的單詞,因此,需要進行去重操作。去重后相同的單詞僅保留一個。為去重后的單詞,建立與對應(yīng)的數(shù)據(jù)分片之間的索引關(guān)系。單詞對應(yīng)的數(shù)據(jù)分片指的是,單詞從哪個數(shù)據(jù)分片中分詞出來的,則該單詞與該數(shù)據(jù)分片是對應(yīng)的。
例如,數(shù)據(jù)分片1分詞后,獲得的是單詞集合為{A、B},數(shù)據(jù)分片2分詞后,獲得的是單詞集合為{A、C}。去重后包含3個單詞,分別為單詞A、單詞B及單詞C。
針對單詞A,建立的索引關(guān)系包括:單詞A與數(shù)據(jù)分片1、及單詞A與數(shù)據(jù)分片2??梢孕蜗蠡硎緸椋簡卧~A--數(shù)據(jù)分片1+數(shù)據(jù)分片2。
針對單詞B,建立的索引關(guān)系包括:單詞B與數(shù)據(jù)分片1,可以表示為,單詞B--數(shù)據(jù)分片1。
針對單詞C,建立的索引關(guān)系包括:單詞C與數(shù)據(jù)分片2,可以表示為,單詞C--數(shù)據(jù)分片2。
這樣,為每個單詞均建立了索引關(guān)系,索引關(guān)系的集合組成了索引文件。
在建立索引關(guān)系時,可以使用solr(一種基于倒排索引原理實現(xiàn)的文檔索引與查詢的引擎)工具。具體地,可以將單詞與對應(yīng)的數(shù)據(jù)分片的編號輸入至solr工具中,該工具可以自動地建立兩者之間的索引關(guān)系。因此,可以認(rèn)為索引文件是由solr工具維護的。
需要說明的是,本申請應(yīng)用在大數(shù)據(jù)量的場景中,有益效果更加明顯,數(shù)據(jù)查詢效率較高。因為,數(shù)據(jù)文件較為龐大,但本申請針對數(shù)據(jù)量較大的原始數(shù)據(jù)文件,建立了數(shù)據(jù)量較小的索引文件,使用該索引文件可以進行初步的模糊查詢。另外,有關(guān)數(shù)據(jù)分片的處理都可以并行進行,如對數(shù)據(jù)分片的分詞操作,在數(shù)據(jù)分片中查詢包含關(guān)鍵字的數(shù)據(jù)單元等。
在實際應(yīng)用中,原始的數(shù)據(jù)文件的個數(shù)可以是一個,也可以多個。在建立索引文件時,可以為每個數(shù)據(jù)文件單獨建立各自的索引文件,也可以針對多個數(shù)據(jù)文件只建立一個索引文件。
第一種,為每個數(shù)據(jù)文件建立各自的索引文件。
獲取到多個數(shù)據(jù)文件后,分別對每個數(shù)據(jù)文件單獨執(zhí)行上述圖2所示的索引文件建立過程,需要說明的是,建立的索引文件與數(shù)據(jù)文件之間具有對應(yīng)關(guān)系,對應(yīng)關(guān)系的形式可以是索引文件具有數(shù)據(jù)文件標(biāo)識,用以表示該索引文件為哪個數(shù)據(jù)文件的索引文件。
例如,建立的索引文件為IndexFile-1,其具有的數(shù)據(jù)文件標(biāo)識為a,用以表示該索引文件IndexFile-1為數(shù)據(jù)文件a的索引文件。
針對上述形式的索引文件,本申請?zhí)峁┝藢?yīng)的數(shù)據(jù)查詢方法實施例。見圖3所示,其示出了數(shù)據(jù)查詢方法實施例3的流程,具體包括:步驟S301~步驟S304。
步驟S301:接收到數(shù)據(jù)查詢請求后,提取其中的關(guān)鍵字及數(shù)據(jù)文件標(biāo)識。
接收到數(shù)據(jù)查詢請求后,可以將數(shù)據(jù)查詢請求處理為:<F',Path',Desc',{keywords}>的形式。其中,F(xiàn)'表示查詢請求指定的數(shù)據(jù)文件名,Path'表示該數(shù)據(jù)文件的存儲路徑,Desc'表示該數(shù)據(jù)文件的描述標(biāo)簽。在不同的應(yīng)用場景中,此三項信息可以是可選項。若數(shù)據(jù)查詢請求中包含此三項信息,則可以提取其中的數(shù)據(jù)文件標(biāo)識F'。
另外,{keywords}表示一系列關(guān)鍵詞的集合,表示數(shù)據(jù)分片中必須包含該集合中的全部關(guān)鍵詞。
從數(shù)據(jù)查詢請求中提取到關(guān)鍵字{keywords}以及數(shù)據(jù)文件標(biāo)識F'。
步驟S302:在多個索引文件中,選擇數(shù)據(jù)文件標(biāo)識對應(yīng)的索引文件。
如上所述,每個數(shù)據(jù)文件均具有各自對應(yīng)的索引文件。根據(jù)從數(shù)據(jù)查詢請求中提取到的數(shù)據(jù)文件標(biāo)識,在多個索引文件中,選擇該數(shù)據(jù)文件標(biāo)識對應(yīng)的索引文件。
例如,從數(shù)據(jù)查詢請求中提取到的數(shù)據(jù)文件標(biāo)識F'=a,選擇出該數(shù)據(jù)文件標(biāo)識a對應(yīng)的索引文件為IndexFile-1。
步驟S303:使用索引文件,查詢與關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片。
使用上一步驟確定出的索引文件,在該索引文件中,查詢關(guān)鍵字的索引關(guān)系指向的數(shù)據(jù)分片。可以理解的是,使用的索引文件為查詢指定的數(shù)據(jù)文件的索引文件,則查詢到的數(shù)據(jù)分片必然為該數(shù)據(jù)文件切分后的數(shù)據(jù)分片。
步驟S304:在數(shù)據(jù)分片中,查詢包含所述關(guān)鍵字的數(shù)據(jù)單元。
如上所述,數(shù)據(jù)分片中包含多個數(shù)據(jù)單元,可以分別讀取數(shù)據(jù)單元,并判斷該數(shù)據(jù)單元中是否包含全部的關(guān)鍵字,若是,則輸出該數(shù)據(jù)單元至查詢結(jié)果集中。查詢結(jié)束后,可以將結(jié)果集返回給查詢端。
以上的數(shù)據(jù)查詢方式中,每個數(shù)據(jù)文件均具有索引文件,索引文件的個數(shù)較多,因此,需要占據(jù)更多的存儲空間。在查詢時,首先根據(jù)數(shù)據(jù)查詢請求中的數(shù)據(jù)文件標(biāo)識,確定索引文件,根據(jù)該索引文件,便可以直接定位到數(shù)據(jù)文件的數(shù)據(jù)分片,因此,查詢效率較高。
第二種,為多個數(shù)據(jù)文件建立一個索引文件。
獲取到多個數(shù)據(jù)文件后,分別對每個數(shù)據(jù)文件切片,獲得數(shù)據(jù)分片。對每個數(shù)據(jù)分片進行分詞操作,獲得每個數(shù)據(jù)分片各自的單詞集合。將全部單詞集合融合在一個集合中進行去重后,確定去重后的單詞有哪些,建立去重后的單詞與對應(yīng)數(shù)據(jù)分片之間的索引關(guān)系。索引關(guān)系的集合即索引文件。
這樣,多個數(shù)據(jù)文件的單詞融合在一個索引文件中,單詞與數(shù)據(jù)分片之間具有索引關(guān)系,數(shù)據(jù)分片具有文件標(biāo)識,用以表示數(shù)據(jù)分片屬于哪一數(shù)據(jù)文件。
例如,索引文件中的一個索引關(guān)系是“連接超時--數(shù)據(jù)分片77”,其中,數(shù)據(jù)分片77具有文件標(biāo)識a,用以表示數(shù)據(jù)分片77屬于文件a。
針對上述形式的索引文件,本申請?zhí)峁┝讼鄳?yīng)的數(shù)據(jù)查詢方法實施例。見圖4,其示出了數(shù)據(jù)查詢方法實施例3的流程,具體包括步驟S401~步驟S404。
步驟S401:接收到數(shù)據(jù)查詢請求后,提取其中的關(guān)鍵字及數(shù)據(jù)文件標(biāo)識。
有關(guān)此步驟的說明可以參見上述步驟S301,此處并不贅述。
步驟S402:使用索引文件,查詢與關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片。
可以理解的是,本步驟中的索引文件是根據(jù)多個數(shù)據(jù)文件生成的一個索引文件。該索引文件中同樣記錄的是單詞與數(shù)據(jù)分片之間的索引關(guān)系,只不過是,單詞來源于多個數(shù)據(jù)文件。
將數(shù)據(jù)查詢請求中的關(guān)鍵字與單詞進行比對,并根據(jù)索引關(guān)系,來確定數(shù)據(jù)分片。
步驟S403:在數(shù)據(jù)分片中,選擇與數(shù)據(jù)文件標(biāo)識對應(yīng)的數(shù)據(jù)分片。
前已述及,該索引文件中的數(shù)據(jù)分片具有文件標(biāo)識,因此,使用數(shù)據(jù)查詢請求中的數(shù)據(jù)文件標(biāo)識可以進行再次篩選,即在步驟S402查詢到的數(shù)據(jù)分片中,選擇與數(shù)據(jù)查詢請求中的數(shù)據(jù)文件標(biāo)識具有對應(yīng)關(guān)系的數(shù)據(jù)分片。
例如,步驟S402查詢到的數(shù)據(jù)分片包括數(shù)據(jù)分片77及數(shù)據(jù)分片88,其中,數(shù)據(jù)分片具有的文件標(biāo)識為a,數(shù)據(jù)分片88具有的文件標(biāo)識為b。數(shù)據(jù)查詢請求中的數(shù)據(jù)文件標(biāo)識為a,因此,本步驟選擇的數(shù)據(jù)分片為數(shù)據(jù)分片77。
步驟S404:在數(shù)據(jù)分片中,查詢包含關(guān)鍵字的數(shù)據(jù)單元。
有關(guān)此步驟的說明可以參見上述步驟S304,此處并不贅述。
由以上技術(shù)方案可知,與圖3所示的數(shù)據(jù)查詢方法相比,圖4所示的數(shù)據(jù)查詢方法中,為多個數(shù)據(jù)文件生成一個索引文件,索引文件的數(shù)據(jù)較少,占據(jù)的存儲空間較少。在查詢時,根據(jù)該索引文件確定出數(shù)據(jù)分片后,還需要根據(jù)數(shù)據(jù)文件標(biāo)識對數(shù)據(jù)分片再次篩選,查詢效率相對較低。
需要說明的是,以上為多個數(shù)據(jù)文件建立的索引文件可以認(rèn)為是倒排索引,倒排索引中記錄的是單詞與數(shù)據(jù)分片之間的對應(yīng)關(guān)系,簡單而言就是,單詞出現(xiàn)在哪些數(shù)據(jù)分片中,例如“連接超時”--S1+S3,表示,“連接超時”這個單詞出現(xiàn)在數(shù)據(jù)分片S1和數(shù)據(jù)分片S3中。
當(dāng)然,還可以建立正向索引,記錄的是數(shù)據(jù)文件與數(shù)據(jù)分片之間的對應(yīng)關(guān)系,簡單而言就是,數(shù)據(jù)文件被分割為哪些數(shù)據(jù)分片,例如,數(shù)據(jù)文件a--S1+S2表示,數(shù)據(jù)文件a被分割為數(shù)據(jù)分片S1和數(shù)據(jù)分片S2;數(shù)據(jù)文件b--S3+S4表示,數(shù)據(jù)文件b被分割為數(shù)據(jù)分片S3和數(shù)據(jù)分片S4。
這樣,在進行數(shù)據(jù)查詢時,接收到的查詢請求中包含數(shù)據(jù)文件的標(biāo)識,如數(shù)據(jù)文件的描述符,根據(jù)數(shù)據(jù)文件的描述符可以查找到對應(yīng)的數(shù)據(jù)文件,進而根據(jù)正向索引查詢到該數(shù)據(jù)文件所對應(yīng)的數(shù)據(jù)分片集合,為了與下文的另一數(shù)據(jù)分片集合區(qū)分,可以將該數(shù)據(jù)分片集合稱為第一數(shù)據(jù)分片集合。
數(shù)據(jù)查詢請求中還包含關(guān)鍵字,根據(jù)倒排索引,可以查詢到該關(guān)鍵字所對應(yīng)的數(shù)據(jù)分片集合,將該數(shù)據(jù)分片集合稱為第二數(shù)據(jù)分片集合。
確定第一數(shù)據(jù)分片集合與第二數(shù)據(jù)分片集合中的交集,交集中的數(shù)據(jù)分片即符合查詢請求的數(shù)據(jù)分片,進而在該數(shù)據(jù)分片中查詢包含關(guān)鍵字的數(shù)據(jù)單元。
例如,查詢請求是想要從數(shù)據(jù)文件a中查詢“連接超時”這個關(guān)鍵字。其中,根據(jù)正向索引,查詢數(shù)據(jù)文件a的數(shù)據(jù)分片,以上述示例為例,查詢到的數(shù)據(jù)分片為S1和數(shù)據(jù)分片S2。根據(jù)倒排索引,查詢“連接超時”對應(yīng)的數(shù)據(jù)分片,以上述示例為例,查詢到的數(shù)據(jù)分片為數(shù)據(jù)分片S1和數(shù)據(jù)分片S3。兩個數(shù)據(jù)分片集合的交集為數(shù)據(jù)分片S1,便可以在數(shù)據(jù)分片S1中進行精確查詢,準(zhǔn)確定位數(shù)據(jù)分片S1所在的數(shù)據(jù)單元。
該種技術(shù)方案中,建立了正向索引及倒排索引兩種索引,更加系統(tǒng)地管理存儲的數(shù)據(jù),且可以快速地進行數(shù)據(jù)查詢。
以上多種技術(shù)方案中,索引文件的形式不同,數(shù)據(jù)查詢方法的效率相應(yīng)不同。在實際應(yīng)用中,可以根據(jù)不同的查詢需求,選擇不同的方案。
以下對本申請?zhí)峁┑臄?shù)據(jù)查詢裝置進行介紹,需要說明的是,下文有關(guān)數(shù)據(jù)查詢裝置的說明可以參見上文提供的數(shù)據(jù)查詢方法,以下并不贅述。
與上述數(shù)據(jù)查詢方法實施例1相對應(yīng),本申請?zhí)峁┝艘环N數(shù)據(jù)查詢裝置實施例1。
見圖5,該數(shù)據(jù)查詢裝置實施例1可以具體包括:關(guān)鍵字提取單元501、數(shù)據(jù)分片查詢單元502、及數(shù)據(jù)單元查詢單元503。
關(guān)鍵字提取單元501,用于接收到數(shù)據(jù)查詢請求后,提取數(shù)據(jù)查詢請求中的關(guān)鍵字;
數(shù)據(jù)分片查詢單元502,用于使用預(yù)先建立的索引文件,查詢與關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片;其中,數(shù)據(jù)分片中包含至少一個數(shù)據(jù)單元;
數(shù)據(jù)單元查詢單元503,用于在數(shù)據(jù)分片中,查詢包含關(guān)鍵字的數(shù)據(jù)單元。
另外,該數(shù)據(jù)查詢裝置還可以包括:索引文件建立單元,用于建立索引文件。具體地,索引文件建立單元可以通過執(zhí)行上述圖2所示的步驟S201~步驟S203,來建立索引文件。
數(shù)據(jù)分片內(nèi)包含多個數(shù)據(jù)單元;相應(yīng)地,在執(zhí)行步驟S202時,索引文件建立單元具體用于:
并行獲取每個數(shù)據(jù)分片,并按照以下步驟并行處理每個數(shù)據(jù)分片:
依次讀取數(shù)據(jù)分片的各個數(shù)據(jù)單元,對數(shù)據(jù)單元進行分詞操作后,獲得與數(shù)據(jù)分片對應(yīng)的多個單詞。
另外,在執(zhí)行使用預(yù)先建立的索引文件,查詢與關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片的步驟時,數(shù)據(jù)分片查詢單元502可以具體用于:
在預(yù)先建立的索引文件中,查詢與關(guān)鍵字相同的單詞;
確定與單詞具有索引關(guān)系的數(shù)據(jù)分片。
在一個示例中,建立的索引文件為一個,且索引文件是多個數(shù)據(jù)文件的索引文件。另外,數(shù)據(jù)查詢請求中包含數(shù)據(jù)文件標(biāo)識。
針對此種場景,本申請?zhí)峁┝藬?shù)據(jù)查詢裝置實施例2。如圖6所示,該裝置實施例2可以具體包括:
關(guān)鍵字提取單元601,用于接收到數(shù)據(jù)查詢請求后,提取數(shù)據(jù)查詢請求中的關(guān)鍵字;
數(shù)據(jù)文件標(biāo)識提取單元602,用于在提取數(shù)據(jù)查詢請求中的關(guān)鍵字時,提取數(shù)據(jù)查詢請求中的數(shù)據(jù)文件標(biāo)識;
數(shù)據(jù)分片查詢單元603,用于使用預(yù)先建立的索引文件,查詢與關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片;其中,數(shù)據(jù)分片中包含至少一個數(shù)據(jù)單元;
數(shù)據(jù)分片選擇單元604,用于在數(shù)據(jù)分片中,選擇與數(shù)據(jù)文件標(biāo)識對應(yīng)的數(shù)據(jù)分片;
數(shù)據(jù)單元查詢單元605,用于在選擇出的數(shù)據(jù)分片中,查詢包含關(guān)鍵字的數(shù)據(jù)單元。
在另一個示例中,建立的索引文件為多個,且不同的索引文件對應(yīng)不同的數(shù)據(jù)文件。另外,數(shù)據(jù)查詢請求中包含數(shù)據(jù)文件標(biāo)識。
針對此種場景,本申請?zhí)峁┝藬?shù)據(jù)查詢裝置實施例3。如圖7所示,該裝置實施例3可以具體包括:
關(guān)鍵字提取單元701,用于接收到數(shù)據(jù)查詢請求后,提取數(shù)據(jù)查詢請求中的關(guān)鍵字;
數(shù)據(jù)文件標(biāo)識提取單元702,用于在提取數(shù)據(jù)查詢請求中的關(guān)鍵字時,提取數(shù)據(jù)查詢請求中的數(shù)據(jù)文件標(biāo)識;
數(shù)據(jù)分片查詢單元703,用于在多個索引文件中,選擇與數(shù)據(jù)文件標(biāo)識對應(yīng)的索引文件,并使用選擇出的索引文件,查詢與關(guān)鍵字具有索引關(guān)系的數(shù)據(jù)分片;
數(shù)據(jù)單元查詢單元704,用于在數(shù)據(jù)分片中,查詢包含關(guān)鍵字的數(shù)據(jù)單元。
需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括上述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本申請。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本申請的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本申請將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。