欢迎来到天天文库
浏览记录
ID:10188817
大小:7.56 MB
页数:6页
时间:2018-06-12
《hbase二级索引实现方案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、HBase二级索引实现方案——ODP说明:本方案主要参照了华为公布的HBase二级索引实现方案。1.概要设计主要思路:为每个DataTable创建一个与之对应的IndexTable,通过各种途径,保证IndexTableRegion与DataTableRegion一一对应,并且存储在同一个RegionServer上,存储结构如图1所示。最终要实现的效果是,每个IndexTableRegion是对应的DataTableRegion的局部索引,使用索引进行查询时,将对每个IndexTableRegion进行检索,找出所有符合条件的DataTableRowKey,再根据DataTableR
2、owKey到对应的DataTableRegion中读取相应DataTableRow。图1HBase二级索引存储结构示意图2.详细设计2.1.IndexTable的创建IndexTable的创建主要出现在两个时机,一是创建新DataTable时,系统根据索引定义,自动创建对应的IndexTable;二是对已存在的DataTable,用户调用接口方法,动态创建索引。IndexTable的创建过程如下:第一步,获取DataTable的所有RegionInfo,得到所有DataTableRegion的StartKey。第二步,结合索引定义和DataTableRegion的StartKey信息
3、,调用HBaseAdmin的createTable(finalHTableDescriptordesc,byte[][]splitKeys)方法创建索引表。通过以上两步便建立了IndexTableRegion和DataTableRegion的以StartKey为依据的一一对应关系。1.1.IndexTableRowKey的设计IndexTable的RowKey由四部分组成,按顺序依次是:DataTableRegionStartKey、IndexName、IndexValue和DataTableRowKey,如图2所示。图2IndexTableRowKey结构示意图A.DataTabl
4、eRegionStartKey。将DataTableRegion的StartKey作为IndexTableRegion的RowKey的第一部分,主要基于两个方面的考虑。一是使得IndexTableRegion和对应的DataTableRegion拥有相同的StartKey,这样便可将StartKey作为两个Region的关联依据;二是当DataTableRegion分裂时,可使用相同的SplitKey对IndexTableRegion进行相应的分裂操作,并将新产生的DataTableRegion和IndexTableRegion建立关联关系。B.IndexName。在一张DataTa
5、ble的基础上可以定义多个索引,如果为每个索引创建一个IndexTable,则在实际应用过程中,势必会产生大量的IndexTable,当DataTableRegion分裂时,还需要对与之关联的所有IndexTableRegion分别执行分裂操作,这将消耗大量的系统资源,并且不易维护。因此,我们考虑将一张DataTable的所有索引数据,存放到同一张IndexTable中,不同索引的数据以IndexName进行区分。C.IndexValue。如果索引是单列索引,IndexValue就是DataTableRow的某个ColumnValue,如果索引是组合索引的话,则IndexValue就
6、是DataTableRow的多个ColumnValue组合而成的。D.DataTableRowKey。被用来定位DataTableRow,以获取最终的数据。1.2.IndexTableRegion的分配控制IndexTableRegion的分配控制过程,即是保证IndexTableRegion与DataTableRegion的一一对应,并且被分配到同一个RegionServer的过程。自定义LoadBalancer,重写balanceCluster方法,主要增加对IndexTableRegion的分配控制。以相同的StartKey作为IndexTableRegion和DataTabl
7、eRegion的关联依据,将IndexTableRegion和与其对应的DataTableRegion分配到同一个RegionServer。自定义LoadBalancer对IndexTableRegion的分配控制过程如图3所示。图3自定义LoadBalancer对IndexTableRegion的分配控制示意图注意:这里只增加对IndexTableRegion分配的控制,并不对DataTableRegion的分配进行干预,DataTableRegion由
此文档下载收益归作者所有