數(shù)據(jù)掃描方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及計算機技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)掃描方法和裝置。
【背景技術(shù)】
[0002]在相關(guān)技術(shù)中,可以通過Map-Reduce(映射-歸約)等計算框架實現(xiàn)大規(guī)模的數(shù)據(jù)集并行分析,比如HBase(Hadoop Database)數(shù)據(jù)庫也提供了通過Map-Reduce來分析其數(shù)據(jù)的庫函數(shù),使得用戶可以通過輸入List〈Scan>任務(wù)的方式,發(fā)起對數(shù)據(jù)庫表的掃描分析。
[0003]然而,相關(guān)技術(shù)在對List〈Scan>任務(wù)的處理過程中,需要針對其中的每個Scan掃描指令分別啟動相應(yīng)的Map掃描進程來進行數(shù)據(jù)掃描,而通常List〈Scan>任務(wù)中往往會包含很多Scan掃描指令,甚至可能達到上百個Scan掃描指令,導(dǎo)致需要同時啟動非常多的Map掃描進程,而每個Map掃描進程的調(diào)度與啟動退出消耗的時間比較長,最終導(dǎo)致List〈Scan>任務(wù)需要耗費很長時間。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供一種數(shù)據(jù)掃描方法和裝置,以解決相關(guān)技術(shù)中的上述技術(shù)問題。
[0005]本發(fā)明提供了如下技術(shù)方案:
[0006]根據(jù)本發(fā)明的第一方面,提出了一種數(shù)據(jù)掃描方法,包括:
[0007]獲取當(dāng)前任務(wù)對應(yīng)的數(shù)據(jù)表的子集信息;
[0008]根據(jù)所述子集信息,判斷所述當(dāng)前任務(wù)中包含的各掃描指令在查詢所述數(shù)據(jù)表時覆蓋的子集;
[0009]與被覆蓋的子集一一對應(yīng)地啟動相應(yīng)的掃描進程,以進行數(shù)據(jù)掃描。
[0010]根據(jù)本發(fā)明的第二方面,提出了一種數(shù)據(jù)掃描裝置,包括:
[0011 ]子集信息獲取單元,用于獲取當(dāng)前任務(wù)對應(yīng)的數(shù)據(jù)表的子集信息;
[0012]子集判定單元,用于根據(jù)所述子集信息,判斷所述當(dāng)前任務(wù)中包含的各掃描指令在查詢所述數(shù)據(jù)表時覆蓋的子集;
[0013]執(zhí)行單元,用于與被覆蓋的子集一一對應(yīng)地啟動相應(yīng)的掃描進程,以進行數(shù)據(jù)掃。
[0014]由以上技術(shù)方案可見,本發(fā)明通過分析每個掃描指令在查詢數(shù)據(jù)時所覆蓋的子集,并以覆蓋的子集的數(shù)量來啟動相應(yīng)數(shù)量的掃描進程,即啟動與各子集一一對應(yīng)的掃描進程,從而可以減少分析任務(wù)總體Map數(shù)量,從而減少任務(wù)調(diào)度方面的開銷與延遲,提升任務(wù)整體分析性能。
【附圖說明】
[0015]圖1是本發(fā)明實施例中提供的一種數(shù)據(jù)掃描方法的流程圖;
[0016]圖2是本發(fā)明實施例中提供的另一種數(shù)據(jù)掃描方法的流程圖;
[0017]圖3是本發(fā)明實施例中提供的一種電子設(shè)備的結(jié)構(gòu)示意圖;
[0018]圖4是本發(fā)明實施例中提供的一種數(shù)據(jù)掃描裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0019]下文中將參考附圖并結(jié)合實施例來詳細說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。
[0020]請參考圖1,圖1是本發(fā)明實施例中提供的一種數(shù)據(jù)掃描方法的流程圖,該方法應(yīng)用于數(shù)據(jù)庫中,可以包括以下步驟:
[0021 ]步驟102,獲取當(dāng)前任務(wù)對應(yīng)的數(shù)據(jù)表的子集信息。
[0022]在本實施例中,本發(fā)明的技術(shù)方案可以應(yīng)用于各種類型的數(shù)據(jù)庫;舉例而言,該數(shù)據(jù)庫可以為HBas e數(shù)據(jù)庫,但本發(fā)明并不對此進行限制。
[0023]為了便于描述,下文以HBase數(shù)據(jù)庫為例進行說明。在HBase數(shù)據(jù)庫中,隨著每一數(shù)據(jù)表(或稱,數(shù)據(jù)庫表)中記錄的數(shù)據(jù)增多,HBase會將數(shù)據(jù)按照Rowkey(行鍵)進行劃分,形成多個行鍵區(qū)間(Reg1n),每個行鍵區(qū)間均作為相應(yīng)數(shù)據(jù)表的子集,并且僅記錄對應(yīng)行鍵范圍(由對應(yīng)的起始Rowkey和終止Rowkey確定)的數(shù)據(jù),即各個行鍵區(qū)間之間的Rowkey值不會重疊。因此,當(dāng)確定需要查詢的數(shù)據(jù)表之后,就可以知道相應(yīng)的子集信息,即該數(shù)據(jù)表內(nèi)的行鍵區(qū)間劃分情況。
[0024]步驟104,根據(jù)所述子集信息,判斷所述當(dāng)前任務(wù)中包含的各掃描指令(Scan)在查詢所述數(shù)據(jù)表時覆蓋的子集。
[0025]在本實施例中,可以將每個掃描指令的掃描起止行鍵與各子集的起止行鍵進行比較;若任一掃描指令的掃描起止行鍵范圍與任一子集的起止行鍵范圍存在至少一部分重疊,則判定所述任一掃描指令覆蓋所述任一子集。在該實施例中,通過對起止行鍵的比較可以準確判斷每一掃描指令在數(shù)據(jù)表中對應(yīng)覆蓋的子集。
[0026]步驟106,與被覆蓋的子集一一對應(yīng)地啟動相應(yīng)的掃描進程,以進行數(shù)據(jù)掃描;其中,當(dāng)應(yīng)用于HBase數(shù)據(jù)庫時,該掃描進程可以為Map-reduce計算框架啟動的map掃描進程。
[0027]在本實施例中,通過為每個子集對應(yīng)啟動一個掃描進程,根據(jù)當(dāng)前所覆蓋的子集的數(shù)量來啟動相同數(shù)量的掃描進程,而區(qū)別于相關(guān)技術(shù)中對應(yīng)每個掃描指令啟動一個掃描進程,可以有效減少所啟動的掃描進程數(shù)量,從而避免掃描進程在啟動和調(diào)用過程中消耗的時間,有助于提升數(shù)據(jù)掃描效率。
[0028]由上述實施例可知,本發(fā)明通過將屬于同一子集的數(shù)據(jù)由同一個map進程進行分析,從而在針對同一個數(shù)據(jù)表的當(dāng)前任務(wù)中包含諸多掃描指令時,尤其是當(dāng)多個掃描指令均覆蓋了同一子集時,可以有效減少啟動的map進程,有助于減少任務(wù)調(diào)度方面的開銷與延遲,提升任務(wù)整體分析性能。
[0029]進一步地,在上述實施例的基礎(chǔ)上,在另一實施例中還可以包括:當(dāng)任一被覆蓋的子集中存在被多個掃描指令重復(fù)查詢的數(shù)據(jù)片段時,合并對所述數(shù)據(jù)片段的重復(fù)查詢操作。
[0030]換言之,如果兩個掃描指令的掃描區(qū)間(行鍵區(qū)間)有至少一部分發(fā)生重疊,那么通過對重疊部分的合并處理,可以避免相同的數(shù)據(jù)被兩個掃描指令分別重復(fù)掃描,可以避免數(shù)據(jù)的重復(fù)分析和資源浪費,有助于提升數(shù)據(jù)掃描的速度和效率。
[0031]圖2是本發(fā)明實施例中提供的另一種數(shù)據(jù)掃描方法的流程圖,如圖2所示,該方法可以包括以下步驟:
[0032]步驟202,判斷當(dāng)前任務(wù)(如List〈Scan>)中包含的掃描指令(S卩List〈Scan>中包含的Scan指令)的個數(shù)是否小于或等于預(yù)設(shè)值,如果小于或等于該預(yù)設(shè)值,則進入步驟204,否則進入步驟206。
[0033]在本實施例中,由于本發(fā)明在最終執(zhí)行數(shù)據(jù)掃描之前,添加了確定掃描指令覆蓋的子集等步驟,這些步驟需要消耗相應(yīng)的額外處理時長;因此,如果當(dāng)前任務(wù)中包含的掃描指令的數(shù)量較少時,雖然最終執(zhí)行數(shù)據(jù)掃描的時長可能會縮短,但由于存在上述的額外處理時長,所以可能反而造成更長的耗時。
[0034]因此,通過事先判斷當(dāng)前任務(wù)中包含的掃描指令的數(shù)量,可以對數(shù)量較少的情況進行基于相關(guān)技術(shù)的直接處理(即轉(zhuǎn)入步驟204),而對數(shù)量較多的情況按照本發(fā)明的技術(shù)方案進行處理(即轉(zhuǎn)入步驟206)。
[0035]步驟204A,分別為每一掃描指令啟動對應(yīng)的掃描進程(如Map-reduce計算框架啟動的map進程),以分別執(zhí)行每一掃描指令對應(yīng)的查詢操作。
[0036]步驟204B,對當(dāng)前任務(wù)List〈Scan>進行按表分組。
[0037]在本實施例中,由于每條Scan指令可能同時覆蓋多個數(shù)據(jù)表中的數(shù)據(jù),因而可以將不同數(shù)據(jù)表進行分組,比如每個數(shù)據(jù)表為一組,從而分別對每組數(shù)據(jù)表進行掃描處理。
[0038]步驟206,分別確定各個Scan指令在每一數(shù)據(jù)表上覆蓋的子集(Reg1n)。
[0039]在本實施例中,可以分別獲取每一數(shù)據(jù)表的Reg1n信息,包含每個Reg1n的起始Rowkey與終止Rowkey,并結(jié)合每一數(shù)據(jù)表對應(yīng)的每一 Scan指令的掃描起始Rowkey與掃描終止Rowkey,從而對兩個起止范圍進行對比得到各個Scan指令在每個Reg1n上的數(shù)據(jù)分段,即各個Scan指令對各個Reg1n的覆蓋情況。
[0040]步驟208A,針對被覆蓋的每個