行化處理能力 來加速索引構(gòu)建過程。
[0090] 上述機(jī)制可以保證系統(tǒng)支持高效的索引插入、刪除、更新操作,具體地:
[0091] 對(duì)用戶表進(jìn)行數(shù)據(jù)插入時(shí),基于HBaseCoprocessorObserver的索引構(gòu)建模塊會(huì) 根據(jù)操作信息來確定是否觸發(fā)索引表的插入,如果用戶表的新增記錄索引列屬性為空,則 不會(huì)觸發(fā)索引表的插入操作,否則觸發(fā)索引表的插入。
[0092] 對(duì)用戶表進(jìn)行數(shù)據(jù)刪除時(shí),基于HBaseCoprocessorObserver的索引構(gòu)建模塊會(huì) 根據(jù)操作信息來確定是否觸發(fā)索引表的刪除,如果待刪除的數(shù)據(jù)原本沒有對(duì)應(yīng)的索引數(shù)據(jù) (例如,待刪除數(shù)據(jù)的索引列屬性為空,索引表中沒有對(duì)應(yīng)記錄),則不會(huì)觸發(fā)索引表的刪 除操作,否則觸發(fā)索引表的刪除。
[0093] 對(duì)用戶表進(jìn)行數(shù)據(jù)更新時(shí),如果更新列是索引列,那么需要?jiǎng)h除原索引數(shù)據(jù),并重 新插入新的索引數(shù)據(jù);如果更新列是非索引列,但是在索引表中存在該列屬性,則會(huì)觸發(fā)索 引表的更新操作;如果更新列在索引表中不存在(因?yàn)樗饕碇邪瑪?shù)據(jù)表的部分屬性), 則索引表會(huì)忽略此次更新操作。
[0094] 五、數(shù)據(jù)查詢過程
[0095]當(dāng)用戶進(jìn)行單值查詢,即根據(jù)索引列的某一個(gè)值來查找用戶表中所有包含這個(gè)值 的記錄時(shí),客戶端向查詢執(zhí)行引擎發(fā)送查詢請(qǐng)求,查詢執(zhí)行引擎向HBase索引表發(fā)起查詢 請(qǐng)求并返回查詢結(jié)果,結(jié)束此次查詢。
[0096] 本實(shí)施例提出的非主鍵索引方法同時(shí)支持高效的范圍查詢,通過在系統(tǒng)中保存一 個(gè)索引的值表,用來記錄用戶表索引列中存在的所有值并按序存儲(chǔ)起來,來高效的支持范 圍查詢。
[0097] 通常情況下,用戶表索引列經(jīng)常會(huì)出現(xiàn)重復(fù)的值,而且值表中只保存索引列值,所 以值表會(huì)比用戶表小得多。進(jìn)行范圍查詢時(shí),查詢執(zhí)行引擎只需要訪問一次值表,獲得查詢 范圍內(nèi)的所有存在的索引列值,將范圍查詢轉(zhuǎn)換成批量查詢,針對(duì)每個(gè)索引列值發(fā)起單值 查詢,最后查詢執(zhí)行引擎匯總查詢結(jié)果,返回給客戶端。
[0098] 具體地,范圍查詢具體流程如下:
[0099] 1)根據(jù)客戶端范圍查詢的條件,通過Scan操作從HBase中的值表獲取范圍之間所 有存在的索引列值。
[0100] 2)對(duì)范圍內(nèi)存在的索引列值,依次向相應(yīng)的節(jié)點(diǎn)上發(fā)送單值查詢請(qǐng)求。
[0101] 3)匯總查詢結(jié)果,并將匯總后的結(jié)果返回。
[0102] 需要說明的是,范圍查詢中對(duì)值表的訪問會(huì)耗費(fèi)額外的時(shí)間,但由于每次范圍查 詢只需訪問一次值表,其訪問代價(jià)相對(duì)較小。
[0103] 如果用戶表索引列Col的某索引列值為Val,那么按照字節(jié)字典順序的定義,對(duì)任 意用戶表主鍵Key有:
[0104] Col, Val, ^ Col, Val,Key ;
[0105] 于是,對(duì)于單值查詢來說,用戶需要訪問的索引記錄即為存儲(chǔ)在主鍵"Col,Val," 之后的,且主鍵前綴為"Col,Val,"的記錄。
[0106] 另外,如果已知用戶表索引列值Vail與Val2的字節(jié)字典順序有Vall〈Val2,那么 對(duì)任意用戶表主鍵Key有:
[0107] Col, Vail, Key<Col,Val2;
[0108] 那么對(duì)于范圍為[Vall,Val2]的查詢來說,用戶需要訪問的索引記錄即為在主鍵 "Col, Val 1,"之后的,且在主鍵"Col, Val2, "之前的所有記錄。
[0109] 當(dāng)客戶端查詢用戶表中滿足21 <Age〈36的所有記錄時(shí),可知按字節(jié)字典序有 "a,27"〈 "a,21,key"〈 "a,36",其中key是用戶表中滿足查詢條件的記錄主鍵??蛻舳送?過創(chuàng)建HBase的Scan操作,并設(shè)置開始主鍵為"a,21",結(jié)束主鍵為"a,36"。Scan操作將會(huì) 返回開始鍵與結(jié)束鍵之間的所有索引記錄:"a,21,Bob"、"a,30, Jerry",從而將滿足條件 的所有記錄找出。
[0110] 總之,本發(fā)明實(shí)施例提出的基于HBase的非主鍵索引方法是在HBase用戶表的基 礎(chǔ)上建立部分屬性的索引表,同時(shí)支持高效的查詢、插入、刪除、更新操作,以支持在海量動(dòng) 態(tài)大數(shù)據(jù)上的高效非主鍵屬性查詢。
[0111] 采用本發(fā)明所述方法,與現(xiàn)有技術(shù)相比,可以提高HBase上的非主鍵屬性上的查 詢效率。我們的初步測(cè)試結(jié)果驗(yàn)證了我們的設(shè)計(jì)有效性。
[0112] 下表為對(duì)HBase上的非主鍵范圍查詢請(qǐng)求,本發(fā)明實(shí)施例提供的HBase非主鍵索 引構(gòu)建與查詢方法系統(tǒng)HiBase,在225GB(10億條數(shù)據(jù)記錄)上的初步測(cè)試數(shù)據(jù)??梢钥?到,對(duì)于不同大小的結(jié)果集,HBase的執(zhí)行時(shí)間相差不大,因?yàn)镠Base的非主鍵查詢都需要 全部遍歷數(shù)據(jù),和結(jié)果集大小無關(guān)。在結(jié)果集為0的情況下,HiBase的性能提升可以達(dá)到 10萬倍以上,而結(jié)果集為1155的情況下,HiBase的性能提升可以達(dá)到3000倍以上,性能提 升的效果是非常明顯的。
【主權(quán)項(xiàng)】
1. 一種HBase非主鍵索引構(gòu)建與查詢方法,其特征在于,包括: 在分布式內(nèi)存和ffiase數(shù)據(jù)表上建立全局非主鍵索引; 識(shí)別針對(duì)非主鍵屬性的查詢,依據(jù)所述全局非主鍵索引定位到相應(yīng)的索引節(jié)點(diǎn),并向 含有結(jié)果集的所述索引節(jié)點(diǎn)發(fā)送查詢請(qǐng)求。
2. 如權(quán)利要求1所述的HBase非主鍵索引構(gòu)建與查詢方法,其特征在于,在HBase數(shù)據(jù) 表上建立全局非主鍵索引,并將其存儲(chǔ)在HBase持久化索引存儲(chǔ)層中。
3. 如權(quán)利要求1所述的HBase非主鍵索引構(gòu)建與查詢方法,其特征在于,在分布式內(nèi)存 中還存儲(chǔ)熱點(diǎn)非主鍵索引; 在存儲(chǔ)數(shù)據(jù)時(shí),根據(jù)訪問信息標(biāo)記緩存中的熱數(shù)據(jù),并將熱數(shù)據(jù)緩存到基于內(nèi)存的熱 點(diǎn)索引緩存層中。
4. 如權(quán)利要求1所述的HBase非主鍵索引構(gòu)建與查詢方法,其特征在于,HBase可以為 全局非主鍵索引表維護(hù)全局統(tǒng)一的Region劃分,為全局非主鍵索引表提供可擴(kuò)展性和容 錯(cuò)性支持。
5. 如權(quán)利要求1所述的HBase非主鍵索引構(gòu)建與查詢方法,其特征在于,為HBase數(shù)據(jù) 表中待建立索引的非主鍵數(shù)據(jù)列定義如下格式的索引表主鍵: 〈用戶表索引列名,用戶表索引列值,用戶表主鍵〉; 其中,用戶表索引列名是HBase數(shù)據(jù)表中被索引的數(shù)據(jù)列的名稱; 用戶表索引列值是HBase數(shù)據(jù)表中被索引的列的值; 用戶表主鍵是HBase數(shù)據(jù)表中被索引的記錄的主鍵值。
6. 如權(quán)利要求5所述的HBase非主鍵索引構(gòu)建與查詢方法,其特征在于,在全局非主鍵 索引表中存儲(chǔ)了 HBase數(shù)據(jù)表中被頻繁訪問的列值。
7. 如權(quán)利要求5所述的HBase非主鍵索引構(gòu)建與查詢方法,其特征在于,將訪問頻度大 于一預(yù)定閾值的的索引數(shù)據(jù)作為熱點(diǎn)數(shù)據(jù)緩存在內(nèi)存中。
8. 如權(quán)利要求3所述的HBase非主鍵索引構(gòu)建與查詢方法,其特征在于,熱點(diǎn)非主鍵索 引的主鍵格式為: 〈用戶表索引列名,用戶表索引列值〉; 其中,用戶表索引列名是HBase數(shù)據(jù)表中被索引的數(shù)據(jù)列的名稱; 用戶表索引列值是HBase數(shù)據(jù)表中被索引的列的值。
9. 如權(quán)利要求3或7所述的HBase非主鍵索引構(gòu)建與查詢方法,其特征在于,利用一致 性哈希來完成熱點(diǎn)數(shù)據(jù)在分布式內(nèi)存中的存儲(chǔ)管理。
10. -種HBase非主鍵索引構(gòu)建與查詢系統(tǒng),其特征在于,包括: 索引構(gòu)建管理模塊,用于在分布式內(nèi)存和Hbase數(shù)據(jù)表上建立全局非主鍵索引; 持久化存儲(chǔ)管理模塊,用于持久化存儲(chǔ)所述全局非主鍵索引; 查詢執(zhí)行引擎,用于識(shí)別針對(duì)非主鍵屬性的查詢,依據(jù)所述全局非主鍵索引定位到相 應(yīng)的索引節(jié)點(diǎn),并向含有結(jié)果集的所述索引節(jié)點(diǎn)發(fā)送查詢請(qǐng)求。
11. 如權(quán)利要求10所述的HBase非主鍵索引構(gòu)建與查詢系統(tǒng),其特征在于,還包括: 索引內(nèi)存緩存模塊,用于根據(jù)訪問信息標(biāo)記緩存中的熱數(shù)據(jù),并將熱數(shù)據(jù)緩存到基于 內(nèi)存的熱點(diǎn)索引緩存層中。
12. 如權(quán)利要求10所述的HBase非主鍵索引構(gòu)建與查詢系統(tǒng),其特征在于,所述索引構(gòu)
【專利摘要】本發(fā)明公開了一種HBase非主鍵索引構(gòu)建與查詢方法及其系統(tǒng)。所述方法包括:在分布式內(nèi)存和Hbase數(shù)據(jù)表上建立全局非主鍵索引;識(shí)別針對(duì)非主鍵屬性的查詢,依據(jù)所述全局非主鍵索引定位到相應(yīng)的索引節(jié)點(diǎn),并向含有結(jié)果集的所述索引節(jié)點(diǎn)發(fā)送查詢請(qǐng)求。通過在分布式內(nèi)存和Hbase數(shù)據(jù)表上建立全局非主鍵索引,以及在識(shí)別針對(duì)非主鍵屬性的查詢時(shí),依據(jù)所述全局非主鍵索引定位到相應(yīng)的索引節(jié)點(diǎn),并向含有結(jié)果集的所述索引節(jié)點(diǎn)發(fā)送查詢請(qǐng)求,保證不含有結(jié)果集的節(jié)點(diǎn)不參加查詢,從而避免了現(xiàn)有技術(shù)中分布式非主鍵索引存在的性能浪費(fèi)的問題。提高了HBase上大數(shù)據(jù)非主鍵屬性的查詢性能,實(shí)現(xiàn)了為HBase提供非主鍵屬性上的實(shí)時(shí)查詢的能力。
【IPC分類】G06F17-30
【公開號(hào)】CN104850572
【申請(qǐng)?zhí)枴緾N201410658614
【發(fā)明人】董振江, 曲文武, 黃宜華, 葛微
【申請(qǐng)人】中興通訊股份有限公司
【公開日】2015年8月19日
【申請(qǐng)日】2014年11月18日