HBase 二级 索 引 实 现 方 案 ——ODP 说明:本方案主要参照了华为公布的HBase 二级索引实现方案
概要设计 主要思路:为每个 DataTable 创建一个与之对应的IndexTable,通过各种途径,保证IndexTable Region 与 DataTable Region 一一对应,并且存储在同一个 RegionServer 上,存储结构如图 1 所示
最终要实现的效果是,每个 IndexTable Region 是对应的DataTable Region 的局部索引,使用索引进行查询时,将对每个 IndexTable Region 进行检索,找出所有符合条件的DataTable RowKey,再根据 DataTable RowKey 到对应的DataTable Region 中读取相应DataTable Row
图 1 HBase 二级索引存储结构示意图 2
详细设计 2
IndexTable 的创建 IndexTable 的创建主要出现在两个时机,一是创建新 DataTable 时,系统根据索引定义,自动创建对应的IndexTable;二是对已存在的DataTable,用户调用接口方法,动态创建索引
IndexTable 的创建过程如下: 第一步,获取DataTable 的所有RegionInfo,得到所有DataTable Region 的StartKey
第二步,结合索引定义和DataTable Region 的StartKey 信息,调用HBaseAdmin 的createTable(final HTableDescriptor desc, byte [][] splitKeys)方法创建索引表
通过以上两步便建立了IndexTable Region 和DataTable Region 的以StartKey 为依据的一一