2200W条数据测试phoenix查询性能

版本

hbase 1.3.5
phoenix 4.14.2-hbase 1.3

简介

这里的数据来源于网络,直接下载的用户电影打分数据,原数据集有2700W条,这里为了rowkey不重复,我将timestamp作为rowkey,最终获取到了2200W条数据

索引

这里一会儿要用上二级索引,所以这边先介绍一下,由于hbase中只能围绕rowkey设计来提高性能,但是我们引入了phoenix,可以将hbase和phoenix做关联表和关联视图,就可以引入二级索引了,效率确实提升很多

hbase配置

要打开二级索引,hbase-site.xml中需要打开配置


hbase.regionserver.wal.codec
org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec

异步构建索引

由于2200W数据量还是蛮大的,直接构建出错的概率高达100%,毕竟我本人就构建失败了,所以这里推荐异步构建的方式

create index rating_index_user_item_local on RATINGLOCAL("info"."userId","info"."movieId") include ("info"."rating") async;

执行上边的语句之后会在phoenix中生成一个索引,但是并没有什么用,可以相当于只声明了一个变量,我们还得给它赋值,需要再执行下边的语句

hbase org.apache.phoenix.mapreduce.index.IndexTool --data-table RATINGLOCAL --index-table RATING_INDEX_USER_ITEM_LOCAL --output-path ASYNC_IDX_LOCAL

这里异步构建会启动mapreduce,等着任务结束,没有报错,就说明成功了

测试结果

测试过程就不详细介绍了,直接上结果

查询类型 返回数据(条) 耗时
count 1 40s
单条件,非rowkey字段 10 40s
单条件,rowkey字段 10 0.2s
单条件,非rowkey字段,全局索引 10 0.3s
单条件,非rowkey字段,本地索引 10 0.02s
单条件,非rowkey字段,,全局索引 4k 25s
单条件,非rowkey字段,本地索引 4k 18s

你可能感兴趣的:(phoenix)