




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
HBase二級(jí)索引實(shí)現(xiàn)方案——DP說(shuō)明:本方案主要參照了華為公布的Base二級(jí)索引實(shí)現(xiàn)方案。1.概要設(shè)計(jì)主要思路:為每個(gè)DataTable創(chuàng)建一個(gè)與之對(duì)應(yīng)的IndexTable,通過(guò)各種途徑,保證IndexTableRegion與DataTableRegion一一對(duì)應(yīng),并且存儲(chǔ)在同一個(gè)RegionServer上,存儲(chǔ)結(jié)構(gòu)如圖1所示。最終要實(shí)現(xiàn)的效果是,每個(gè)IndexTableRegion是對(duì)應(yīng)的DataTableRegion的局部索引,使用索引進(jìn)行查詢時(shí),將對(duì)每個(gè)IndexTableRegion進(jìn)行檢索,找出所有符合條件的DataTableRowKey,再根據(jù)DataTableRowKey到對(duì)應(yīng)的DataTableRegion中讀取相應(yīng)DataTableRow。DataTable ;IndexTable[1011RegionServerXRegion11111Region1:'1 ii120X. I11:Ji|1120RegionServerXRegion211i網(wǎng)iRegion2 ;;i11113011 I1_1圖1HBase二級(jí)索引存儲(chǔ)結(jié)構(gòu)示意圖2.詳細(xì)設(shè)計(jì)2?1?IndexTable的創(chuàng)IndexTable的創(chuàng)建主要出現(xiàn)在兩個(gè)時(shí)機(jī),一是創(chuàng)建新DataTable時(shí),系統(tǒng)根據(jù)索引定義,自動(dòng)創(chuàng)建對(duì)應(yīng)的IndexTable;二是對(duì)已存在的DataTable,用戶調(diào)用接口方法,動(dòng)態(tài)創(chuàng)建索引。IndexTable的創(chuàng)建過(guò)程如下:第一步,獲取DataTable的所有Regioninfo,得到所有DataTableRegion的StartKey。第二步,結(jié)合索引定義和DataTableRegion的StartKey信息,調(diào)用HBaseAdmin的createTable(finalHTableDescriptordesc,byte[][]splitKeys)方法創(chuàng)建索引表。通過(guò)以上兩步便建立了IndexTableRegion和DataTableRegion的以StartKey為依據(jù)的一一對(duì)應(yīng)關(guān)系。IndexTableRowKey的設(shè)計(jì)IndexTable的RowKey由四部分組成,按順序依次是: DataTableRegionStartKey、IndexName、IndexValue和DataTableRowKey,如圖2所示。DataTableRegionStartKeyIndexNameIndeMValueDataTableRowKey圖2IndexTableRowKey結(jié)構(gòu)示意圖DataTableRegionStartKey。將DataTableRegion的StartKey作為IndexTableRegion的RowKey的第一部分,主要基于兩個(gè)方面的考慮。一是使得IndexTableRegion和對(duì)應(yīng)的DataTableRegion擁有相同的StartKey,這樣便可將StartKey作為兩個(gè)Region的關(guān)聯(lián)依據(jù);二是當(dāng)DataTableRegion分裂時(shí),可使用相同的SplitKey對(duì)IndexTableRegion進(jìn)行相應(yīng)的分裂操作,并將新產(chǎn)生的DataTableRegion和IndexTableRegion建立關(guān)聯(lián)關(guān)系。IndexName。在一張DataTable的基礎(chǔ)上可以定義多個(gè)索引,如果為每個(gè)索引創(chuàng)建一個(gè)IndexTable,則在實(shí)際應(yīng)用過(guò)程中,勢(shì)必會(huì)產(chǎn)生大量的IndexTable,當(dāng)DataTableRegion分裂時(shí),還需要對(duì)與之關(guān)聯(lián)的所有IndexTableRegion分別執(zhí)行分裂操作,這將消耗大量的系統(tǒng)資源,并且不易維護(hù)。因此,我們考慮將一張DataTable的所有索引數(shù)據(jù),存放到同一張IndexTable中,不同索引的數(shù)據(jù)以IndexName進(jìn)行區(qū)分。IndexValue。如果索引是單列索引,IndexValue就是DataTableRow的某個(gè)ColumnValue,如果索引是組合索引的話,則IndexValue就是DataTableRow的多個(gè)ColumnValue組合而成的。DataTableRowKey。被用來(lái)定位DataTableRow,以獲取最終的數(shù)據(jù)。IndexTableRegion的分配控制IndexTableRegion的分配控制過(guò)程,即是保證IndexTableRegion與DataTableRegion的一一對(duì)應(yīng),并且被分配到同一個(gè)RegionServer的過(guò)程。自定義LoadBalancer,重寫balanceCluster方法,主要增加對(duì)IndexTableRegion的分配控制。以相同的StartKey作為IndexTableRegion和DataTableRegion的關(guān)聯(lián)依據(jù),將IndexTableRegion和與其對(duì)應(yīng)的DataTableRegion分配到同一個(gè)RegionServer。自定義LoadBalancer對(duì)IndexTableRegion的分配控制過(guò)程如圖3所示。
1DD111:Region0102dRegion12DRegion2;<50!込Region0:io_1IRegion1;2D1Ii^nRegion2RsgionSet■bhmiMasterMaster圖3自定義LoadBalancer對(duì)IndexTableRegion的分配控制示意圖注意:這里只增加對(duì)IndexTableRegion分配的控制,并不對(duì)DataTableRegion的分配進(jìn)行干預(yù),DataTableRegion由HBase按照指定的負(fù)載均衡策略進(jìn)行分配,使得對(duì)現(xiàn)有HBase運(yùn)行環(huán)境的影響降到最小。2.4.IndexTableRegion的分過(guò)程2.4.IndexTableRegion的分過(guò)程本節(jié)將以一個(gè)示例講述IndexTableRegion的分裂過(guò)程,假設(shè)當(dāng)前有一個(gè)DataTableRegion和對(duì)應(yīng)的IndexTableRegion,如圖4所示,綠色表格為DataTableRegion,紅色表格為IndexTableRegion。StartKeyJDORowKcyValueRowKsyValue00DATAStartKey^JO01DATA□0**0502DATAMKK0003DATA00**0404DATA00**0405DATA00*^01□0**0500KK0300**02圖4DataTableRegion和IndexTableRegion根據(jù)概要設(shè)計(jì)中的說(shuō)明,假設(shè)SplitKey:O3,經(jīng)過(guò)一系列操作之后,原來(lái)的DataTableRegion和IndexTableRegion均分裂成兩個(gè)新的Region,并且依然保存一一對(duì)應(yīng)關(guān)系。最終效果如圖5所示。
RowKeyValue00DATA01DATA02DATARowKeyValue00DATA01DATA02DATAStartKey:OORowKgyValueDO**02do**o<DO**0000**02StartKey:DORowKeyValue03DATA,04DATAosDATAStartKeyiDaRowKeyValue03K*Q503**04D3**(M03**03StartKey:D3圖5分裂后的最終效果示意圖IndexTableRegion具體分步驟說(shuō)明如下:第一步,確定SplitKey后,遍歷IndexTableRegion中所有的行,找出所有DataTableRowKey大于或等于SplitKey的Row,如圖6.1所示。RowKeyVolue00DATA01RowKeyVolue00DATA01DATAozDATA03DATA04DATA05DATAStjrtKey:OOSplitKEy:Q3RowKeyValue00**0;00**05Do**aiDO*伽00**01D0**0500**0300**02StartKey:[X)RowKeyValut00RowKeyValut00DATA01DATAQ2DATAQBDATA04DATA05DATAStarlKey^JO5plitKey*3圖6.1第一步第二步,刪除第一步找到的所有DataTableRowKey大于或等于SplitKey的Row,并將RowKey的第一部分(DataTableRegionStartKey)替換成SplitKey后,重新插入到IndexTableRegion中,如圖6.2所示。RowKeyValue□0**0;09^0500**0000^04兇帀當(dāng)口?1ooT*o:00"0000**0;06**05曲伽03**035tartKey:00圖6.2第二步
第三步,以SplitKey,同時(shí)對(duì)DataTableRegion和IndexTableRegion進(jìn)行分裂操作,如圖6.3所示。最終達(dá)到如圖5所示的效果。RowKeyValue02DATAI01RowKeyValue02DATAI01DATA02DATA旳DATA04DATA05DATASpli-Key^)SStarTKey^JDRowKeyValu?00*1伽no*伽□0**00GQiiCADO**D100""nooa*&0300"訊OS**0503Tr0403**0406**03StartKey:00^plitKe/:Cl3圖6.3第三步2.5.數(shù)據(jù)的寫入過(guò)程數(shù)據(jù)的寫入過(guò)程,主要通過(guò)Coprocessor代理完成,保證更新DataTableRegion數(shù)據(jù)的同時(shí)更新IndexTableRegion中的數(shù)據(jù)。具體步驟如圖7所示。情景說(shuō)明:L-R—,rlable,r,定盤了一^"CF";王為"Table"上,HCF;Cr和*CF;C2*備列分別連立了素斗「擁舊為Indexl'和5皿垃";3.弓nTable,r對(duì)應(yīng)的索引表毓識(shí)為^ndexTabl^'.Putnh比 V,Putnh比 V,忙FWJVrf圖7數(shù)據(jù)寫入過(guò)程示意圖2.6.數(shù)據(jù)的讀取過(guò)程與數(shù)據(jù)的寫入過(guò)程一樣,數(shù)據(jù)的讀取過(guò)程也是由Coprocessor代理完成。Coprocessor收到查詢請(qǐng)求后,首先判斷是否可以利用某個(gè)索引,提高本次查詢效率。如果有可用的索引,則先從IndexTableRegion中查出所有符合條件的RowKey,再根據(jù)RowKey,從DataTableRegion中查找出實(shí)際的數(shù)據(jù)返回給客戶端。具體步驟如圖8所示。
情景說(shuō)明:1.肓T卡”噸刨試「左義了一b"CF?;2一為-Tabl&,r上nCF:匚1"和“CF:匚尹兩列分別建立了索引」極識(shí)為1ndexlv和'Index?-;3.與-lable"對(duì)應(yīng)的索引表悔識(shí)為"Jndexlable1*.0000DataTableRegiOinSELECTxfftUM'lnbkrWHLHLSELECTxfftUM'lnbkrWHLHLCF;l:lT-JSJCoprocessortxactdatahvHdwKev^OL)]Hod'IndexTableRegion圖8數(shù)據(jù)讀出過(guò)程示意圖注意:通過(guò)2.3節(jié)中描述的IndexTableReg
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度競(jìng)業(yè)協(xié)議失效一個(gè)月競(jìng)業(yè)限制解除補(bǔ)償合同
- 二零二五年度大型商場(chǎng)裝修合同(含室內(nèi)外環(huán)境美化)
- 二零二五年度特色主題展臺(tái)設(shè)計(jì)制作安裝一體化合同
- 二零二五年度紋身技藝培訓(xùn)與加盟合作協(xié)議
- 二零二五年度新能源產(chǎn)業(yè)臨時(shí)研發(fā)人員服務(wù)協(xié)議
- 2025年度網(wǎng)絡(luò)安全防護(hù)合同價(jià)款調(diào)整與網(wǎng)絡(luò)安全事件應(yīng)對(duì)
- 二零二五年度虛擬現(xiàn)實(shí)產(chǎn)業(yè)利潤(rùn)分配協(xié)議書
- 二零二五年度搏擊教練員免責(zé)責(zé)任書
- 農(nóng)業(yè)現(xiàn)代化技術(shù)推廣合作協(xié)議
- 智能建筑系統(tǒng)合同
- 2023年全國(guó)高考體育單招考試英語(yǔ)試卷試題真題(精校打印版)
- 2023年四川省綿陽(yáng)市中考化學(xué)試卷真題(含答案與解析)
- 財(cái)務(wù)管理中的財(cái)務(wù)指標(biāo)
- 2016-2023年青島酒店管理職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 第二章-環(huán)境數(shù)據(jù)統(tǒng)計(jì)與分析
- 電力各種材料重量表總
- 腸道健康講座活動(dòng)策劃
- 醫(yī)療器械(耗材)項(xiàng)目投標(biāo)服務(wù)投標(biāo)方案(技術(shù)方案)
- 小學(xué)三年級(jí)下冊(cè)數(shù)學(xué)教案3篇
- pci術(shù)后術(shù)肢腫脹處理流程
- 遼寧省營(yíng)口市2023-2024學(xué)年七年級(jí)上學(xué)期期末英語(yǔ)試題
評(píng)論
0/150
提交評(píng)論