赞
踩
HBase表后期按照rowkey查询性能是最高的。rowkey就相当于hbase表的一级索引,但是后期我们进行查询的时候大多时候都会按照一定条件去查找,这时我们是不知道rowkey的值,我们也可以通过hbase的过滤器去实现,但是在查询的时候会触发大量的底层文件扫描,效率比较低,这时我们可以以空间去时间 去实现hbase的二级索引,提高查询效率。
Hbase二级索引:
hbase二级索引思想:
Phoenix+hbase方案 :
在hbase-site.xml
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
<property>
<name>hbase.region.server.rpc.scheduler.factory.class</name>
<value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value>
</property>
<property>
<name>hbase.rpc.controllerfactory.class</name>
<value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value>
</property>
实操:
一张USER_INFO表中有50万条数据
在hbase中查询count 使用了38.7s
在Phoenix 中创建映射表
create view USER_INFO(
"ROWKEY" varchar primary key,
"INFO"."IID" varchar,
"INFO"."ICRED" varchar,
"INFO"."ITIME" varchar,
"INFO"."IPASSWORD" varchar,
"INFO"."IAGE" varchar,
"INFO"."IUSE" varchar,
"INFO"."IJSP" varchar,
"INFO"."IWIN" varchar,
"INFO"."IBROWSER" varchar,
"INFO"."IIP" varchar,
"INFO"."IPROVINCE" varchar,
"INFO"."ICITY" varchar,
"INFO"."IPAGE" varchar,
"INFO"."IGOODS" varchar,
"INFO"."ISHOP" varchar
) as select * from USER_INFO;
在Phoenix中查询数量:
可以看到只用了8.883s 但是这个时间还有没有达到毫秒级别,这里我们可以通过在Phoenix中建立索引。
查询IAGE 为77的数据 ,用时6.45s
Global Indexing
Local Indexing
测试使用 Global Indexing创建全局索引:
create index USER_COOKIE_ID_INDEX on USER ("IAGE");
查询IAGE 为77的数据 :
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。