一種二級(jí)索引建立方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,特別是涉及一種二級(jí)索引建立方法和一種二級(jí)索引建立裝置。
【背景技術(shù)】
[0002]HBase是一個(gè)分布式的、面向列的開源數(shù)據(jù)庫(kù)。HBase在根據(jù)rowkey查找數(shù)據(jù)的效率很高,但是根據(jù)column內(nèi)容查找符合條件的行一般采取全表掃描的方式,效率很低。因此需要對(duì)HBase建立二級(jí)索引加快查找速度。
[0003]現(xiàn)有的一種對(duì)HBase建立二級(jí)索引的方法是在客戶端實(shí)現(xiàn)索引,建立索引的方式包括使用solr/nutch/lucene等開源工具,或者是在HBase中建立一張索引表。該方法中索引的建立和使用是伴隨著客戶端創(chuàng)建索引和寫實(shí)際數(shù)據(jù)進(jìn)行的,在HBase中進(jìn)行數(shù)據(jù)更新時(shí),例如向HBase中插入新的數(shù)據(jù),除了需要向HBase表中添加數(shù)據(jù)之外,還需要同時(shí)對(duì)數(shù)據(jù)單獨(dú)建立索引。
[0004]雖然,利用上述二級(jí)索引可以加快數(shù)據(jù)查找速度,尤其是在根據(jù)column內(nèi)容查找符合條件的行數(shù)據(jù)的時(shí)候。然而,上述建立二級(jí)索引的方式對(duì)于大規(guī)模數(shù)據(jù)的支持能力較低。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實(shí)施例所要解決的技術(shù)問題是提供一種二級(jí)索引建立方法,能夠提高對(duì)大規(guī)模數(shù)據(jù)的支持能力。
[0006]相應(yīng)的,本發(fā)明實(shí)施例還提供了一種二級(jí)索引建立裝置,用以保證上述方法的實(shí)現(xiàn)及應(yīng)用。
[0007]為了解決上述問題,本發(fā)明實(shí)施例公開了一種二級(jí)索引建立方法,包括:
[0008]索引初始化,包括:對(duì)數(shù)據(jù)庫(kù)全表進(jìn)行掃描,并對(duì)每一行數(shù)據(jù)建立一個(gè)索引;
[0009]掃描所述數(shù)據(jù)庫(kù)中行數(shù)據(jù)的標(biāo)記位,所述標(biāo)記位用于標(biāo)記其對(duì)應(yīng)行數(shù)據(jù)的變化情況;
[0010]根據(jù)所述行數(shù)據(jù)的標(biāo)記位處理所述行數(shù)據(jù)的索引。
[0011]進(jìn)一步,所述根據(jù)所述行數(shù)據(jù)的標(biāo)記位處理所述行數(shù)據(jù)的索引,包括:
[0012]當(dāng)所述行數(shù)據(jù)的標(biāo)記位表征所述行數(shù)據(jù)為新增數(shù)據(jù)時(shí),讀取所述行數(shù)據(jù),并添加所述行數(shù)據(jù)的索引。
[0013]進(jìn)一步,所述根據(jù)所述行數(shù)據(jù)的標(biāo)記位處理所述行數(shù)據(jù)的索引,包括:
[0014]當(dāng)所述行數(shù)據(jù)的標(biāo)記位表征所述行數(shù)據(jù)為改動(dòng)數(shù)據(jù)時(shí),讀取所述行數(shù)據(jù),并更新所述行數(shù)據(jù)對(duì)應(yīng)的索引。
[0015]進(jìn)一步,所述根據(jù)所述行數(shù)據(jù)的標(biāo)記位處理所述行數(shù)據(jù)的索引,包括:
[0016]當(dāng)所述行數(shù)據(jù)的標(biāo)記位表征所述行數(shù)據(jù)為需刪除數(shù)據(jù)時(shí),刪除所述行數(shù)據(jù)對(duì)應(yīng)的索引。
[0017]進(jìn)一步,所述索引的索引標(biāo)識(shí)為所述索引對(duì)應(yīng)的行數(shù)據(jù)的Rowkey。
[0018]進(jìn)一步,所述掃描所述數(shù)據(jù)庫(kù)中行數(shù)據(jù)的標(biāo)記位,包括:
[0019]根據(jù)預(yù)設(shè)時(shí)間間隔掃描所述數(shù)據(jù)庫(kù)中行數(shù)據(jù)的標(biāo)記位。
[0020]進(jìn)一步,所述對(duì)數(shù)據(jù)庫(kù)全表進(jìn)行掃描,并對(duì)每一行數(shù)據(jù)建立一個(gè)索引,包括:
[0021]對(duì)數(shù)據(jù)庫(kù)全表進(jìn)行掃描,并對(duì)每一行數(shù)據(jù)在elasticsearch中建立一個(gè)索引。
[0022]本發(fā)明實(shí)施例還公開了一種數(shù)據(jù)查詢方法,所述方法應(yīng)用于按照前述方法建立的二級(jí)索引,所述數(shù)據(jù)查詢方法包括:
[0023]在所述二級(jí)索引中搜索滿足指定條件的數(shù)據(jù);
[0024]確定所述滿足指定條件的數(shù)據(jù)對(duì)應(yīng)的索引;
[0025]根據(jù)索引與行數(shù)據(jù)的對(duì)應(yīng)關(guān)系,讀取與確定出的索引相對(duì)應(yīng)的行數(shù)據(jù)。
[0026]本發(fā)明實(shí)施例還公開了一種二級(jí)索引建立裝置,包括:
[0027]初始化單元,用于索引初始化,包括:對(duì)數(shù)據(jù)庫(kù)全表進(jìn)行掃描,并對(duì)每一行數(shù)據(jù)建立一個(gè)索引;
[0028]掃描單元,用于掃描所述數(shù)據(jù)庫(kù)中行數(shù)據(jù)的標(biāo)記位,所述標(biāo)記位用于標(biāo)記其對(duì)應(yīng)行數(shù)據(jù)的變化情況;
[0029]索引更新單元,用于根據(jù)所述行數(shù)據(jù)的標(biāo)記位處理所述行數(shù)據(jù)的索引。
[0030]進(jìn)一步,所述索引更新單元,具體用于當(dāng)所述行數(shù)據(jù)的標(biāo)記位表征所述行數(shù)據(jù)為新增數(shù)據(jù)時(shí),讀取所述行數(shù)據(jù),并添加所述行數(shù)據(jù)的索引。
[0031]進(jìn)一步,所述索引更新單元,具體用于當(dāng)所述行數(shù)據(jù)的標(biāo)記位表征所述行數(shù)據(jù)為改動(dòng)數(shù)據(jù)時(shí),讀取所述行數(shù)據(jù),并更新所述行數(shù)據(jù)對(duì)應(yīng)的索引。
[0032]進(jìn)一步,所述索引更新單元,具體用于當(dāng)所述行數(shù)據(jù)的標(biāo)記位表征所述行數(shù)據(jù)為需刪除數(shù)據(jù)時(shí),刪除所述行數(shù)據(jù)對(duì)應(yīng)的索引。
[0033]進(jìn)一步,所述索引的索引標(biāo)識(shí)為所述索引對(duì)應(yīng)的行數(shù)據(jù)的Rowkey。
[0034]進(jìn)一步,所述掃描單元,具體用于根據(jù)預(yù)設(shè)時(shí)間間隔掃描所述數(shù)據(jù)庫(kù)中行數(shù)據(jù)的標(biāo)記位。
[0035]進(jìn)一步,所述初始化單元,具體用于對(duì)數(shù)據(jù)庫(kù)全表進(jìn)行掃描,并對(duì)每一行數(shù)據(jù)在elasticsearch中建立一個(gè)索引。
[0036]本發(fā)明實(shí)施例還公開了一種數(shù)據(jù)查詢裝置,所述裝置應(yīng)用于前述的二級(jí)索引建立裝置,所述數(shù)據(jù)查詢裝置包括:
[0037]搜索單元,用于在建立的二級(jí)索引中搜索滿足指定條件的數(shù)據(jù);
[0038]索引確定單元,用于確定所述滿足指定條件的數(shù)據(jù)對(duì)應(yīng)的索引;
[0039]數(shù)據(jù)讀取單元,用于根據(jù)索引與行數(shù)據(jù)的對(duì)應(yīng)關(guān)系,讀取與確定出的索引相對(duì)應(yīng)的行數(shù)據(jù)。
[0040]與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例包括以下優(yōu)點(diǎn):
[0041]本發(fā)明實(shí)施例通過對(duì)數(shù)據(jù)庫(kù)中的每行數(shù)據(jù)建立二級(jí)索弓丨,尤其通過使用elasticsearch和標(biāo)記位,在不影響HBase性能和不修改HBase內(nèi)核的前提下,實(shí)現(xiàn)了對(duì)HBase的二級(jí)索引,并實(shí)現(xiàn)了對(duì)大規(guī)模數(shù)據(jù)的支持。
[0042]并且,現(xiàn)有技術(shù)中建立索引的方式往往需要在HBase中插入數(shù)據(jù)的同時(shí)建立該數(shù)據(jù)的索引,即需要對(duì)數(shù)據(jù)進(jìn)行“雙寫”,如果其中之一寫數(shù)據(jù)或更改數(shù)據(jù)不成功,就會(huì)發(fā)生數(shù)據(jù)不一致的情況,而本發(fā)明實(shí)施例通過增設(shè)行數(shù)據(jù)的標(biāo)記位,在向HBase表添加或修改數(shù)據(jù)時(shí)對(duì)標(biāo)記位進(jìn)行標(biāo)記,并且通過不斷掃描標(biāo)記位對(duì)elasticsearch中的索引進(jìn)行添加或者更新,使得對(duì)HBase表的數(shù)據(jù)修改和對(duì)索引的修改可以分開進(jìn)行,不僅避免了由于寫數(shù)據(jù)失敗造成的數(shù)據(jù)不一致,而且該索引的建立不依賴于HBase的Observer或者其他內(nèi)部模塊,對(duì)HBase的不同版本也沒有特殊的要求,適用范圍更廣。
[0043]還可以通過設(shè)置對(duì)標(biāo)記位的掃描時(shí)間間隔,避免了每次修改HBase的一條數(shù)據(jù)時(shí)立即更新elasticsearch而導(dǎo)致的低效問題。
【附圖說明】
[0044]圖1是本發(fā)明的一種二級(jí)索引建立方法實(shí)施例的步驟流程圖;
[0045]圖2是本發(fā)明的另一種二級(jí)索引建立方法實(shí)施例的步驟流程圖;
[0046]圖3是本發(fā)明的一種數(shù)據(jù)查詢方法實(shí)施例的步驟流程圖;
[0047]圖4是本發(fā)明的一種二級(jí)索引建立裝置實(shí)施例的結(jié)構(gòu)框圖;
[0048]圖5是本發(fā)明一種數(shù)據(jù)查詢裝置實(shí)施例的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0049]為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和【具體實(shí)施方式】對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說明。
[0050]參照?qǐng)D1,示出了本發(fā)明的一種二級(jí)索引建立方法實(shí)施例的步驟流程圖,具體可以包括如下步驟:
[0051]步驟101,索引初始化,包括:對(duì)數(shù)據(jù)庫(kù)全表進(jìn)行掃描,并對(duì)每一行數(shù)據(jù)建立一個(gè)索引。
[0052]本發(fā)明實(shí)施例中,二級(jí)索引建立裝置可以獨(dú)立設(shè)置,也可以設(shè)置在搜索服務(wù)器內(nèi),例如elasticsearch服務(wù)器內(nèi)。該裝置可以與建立二級(jí)索引的數(shù)據(jù)庫(kù)進(jìn)行交互。
[0053]以HBase數(shù)據(jù)庫(kù)為例,在建立Hbase的二級(jí)索引時(shí),首先進(jìn)行索引初始化,即對(duì)HBase全表進(jìn)行掃描,讀取每行數(shù)據(jù),并對(duì)每行數(shù)據(jù)建立一個(gè)索引,也就是二級(jí)索引。
[0054]具體地,可以利用elasticsearch來建立二級(jí)索引。elasticsearch是一個(gè)基于Lucene的開源分布式實(shí)時(shí)搜索和數(shù)據(jù)分析工具,它可以快速的對(duì)數(shù)據(jù)建立倒排索引,進(jìn)行數(shù)據(jù)分析,并且提供實(shí)時(shí)的檢索功能。elasticsearch在處理大規(guī)模數(shù)據(jù)方面具有很大優(yōu)勢(shì),已經(jīng)在很多大型網(wǎng)站的搜索方面得到應(yīng)用,能夠處理TB甚至PB級(jí)別的數(shù)據(jù),可擴(kuò)展能力強(qiáng)。
[0055]本步驟可以對(duì)HBase全表進(jìn)行掃描,將HBase的每行數(shù)據(jù)放入elasticsearch中,并對(duì)每一行數(shù)據(jù)在elasticsearch中建立一個(gè)索引。
[0056]其中,每個(gè)索引對(duì)應(yīng)一個(gè)唯一索引標(biāo)識(shí)id,根據(jù)上述對(duì)應(yīng)關(guān)系,HBase每行數(shù)據(jù)的
Rowkey與索引標(biāo)識(shí)id--對(duì)應(yīng)。為了便于數(shù)據(jù)更新和查找,可以直接將行數(shù)據(jù)的Rowkey
設(shè)置為對(duì)應(yīng)索引的索引標(biāo)識(shí)id。
[0057]步驟102,掃描數(shù)據(jù)庫(kù)中行數(shù)據(jù)的標(biāo)記位,標(biāo)記位用于標(biāo)記其對(duì)應(yīng)行數(shù)據(jù)的變化情況。
[0058]本實(shí)施例中,對(duì)HBase中的每個(gè)Rowkey對(duì)應(yīng)維護(hù)一塊內(nèi)存區(qū)域,在其中增設(shè)Rowkey對(duì)應(yīng)的標(biāo)記位,該標(biāo)記位用于標(biāo)記其對(duì)應(yīng)行數(shù)據(jù)的變化情況,例如,增加數(shù)據(jù),更新數(shù)據(jù),刪除數(shù)據(jù)等。
[0059]對(duì)于不同的變化情況可以設(shè)置不同的標(biāo)記位以便于在掃描到行數(shù)據(jù)的標(biāo)記位時(shí),可以獲知該行數(shù)據(jù)的變化情況具體是哪種情況。例如,標(biāo)記位為