hbase 根据需求创建组合索引(组合rowkey)及组合索引创建规则

9 篇文章 0 订阅
8 篇文章 0 订阅
 

hbase据我目前的了解来看 《查询》方面的最大优势是根据rowkey 进行查询,然后结合map/reduce 运算效率非常高,但是如果牵扯到表关联查询,涉及到列簇中的列时,因为没有索引效率就变的非常低下,所以我这采用了组合索引(组合rowkey)方式来解决这个问题,下面采用简单的例子来说明如何创建,及创建组合rowkey时需要注意的问题。


关系数据库用户表:user

user_id           name

1                       raymond1

2                       raymond2

3                       raymond3


关系数据库用户文章列表ariticle:

article_id         content                user_id

1                       有才                      1

2                       帅哥                      1

3                       奥特man              2

4                       no凹凸man         2


最简单的一个业务需求:查询出某个用户发表所有文章

在关系型数据库解决非常简单,在article表的user_id创建索引,大数据量下效率也没问题,但是hbase下如果按照这个结构,创建article表

article_id 作为rowkey,user_id作为列簇中的列,这时候程序用hbase扫描器scanner进行user_id的扫描就有问题了,因为现在的版本是不支持在列上创建索引的,我现在的解决办法,主键用user_id,article_id 组合方式,

结构如下 user_id+_+article_id

hbase 里article结构如下

rowkey         col1

1_1              有才

1_2              帅哥 

1_3              奥特man

2_4              no凹凸man  

扫描user_id 为1的用户文章,可以通过如下一句设置

Scan scan = new Scan(Bytes.toBytes("1_1"), Bytes.toBytes("1_9"));

来使扫描器定位出1用户所有文章


我曾经担心下见面的rowkey使用Scan scan = new Scan(Bytes.toBytes("1_1"), Bytes.toBytes("1_9"))会有问题

1_1

1_11
1_111

但是经测试发现担心是多余的,scan会自动匹配所有已 1_1 开始1_9结束的数据。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值