Hbase二级索引入门

本节的标题也可能是“如果我的表行键看起来像这样,但我也想像这样查询我的表该怎么办”。 列表上的一个常见示例是其中rowkey的格式为“ user-timestamp”,但是对于特定时间范围内的用户活动有报告要求。因此,由user进行选择很容易,因为它处于键的引导位置,而时间却不然。

解决这一问题的最佳方法没有一个答案,因为这取决于…

用户数

数据大小和数据到达率

报告要求的灵活性(例如,完全临时的日期选择与预先配置的范围)

所需的查询执行速度(例如,对于某些临时报告,90秒对于某些人来说可能是合理的,而对于另一些报告则可能太长)

解决方案还受群集大小以及必须在解决方案上投入多少处理能力的影响。常见技术在下面的小节中。这是方法的综合列表,但并不详尽。

二级索引需要额外的群集空间和处理也就不足为奇了。这正是RDBMS中发生的情况,因为创建备用索引的操作需要空间和处理周期来进行更新。 RDBMS产品在这方面更先进,可以立即处理替代索引管理。但是,HBase可以在更大的数据量时更好地扩展,因此这是一个功能折衷。

实施任何一种方法时,请注意Apache HBase性能调优。

筛选查询
根据情况,使用客户端请求过滤器可能是合适的。在这种情况下,不会创建二级索引。但是,请勿尝试从应用程序(即单线程客户端)对像这样的大表进行全面扫描。

定期更新二级索引
可以在另一个表中创建二级索引,该表通过MapReduce作业定期更新。该作业可以在一天之内执行,但是根据负载策略,它仍可能与主数据表不同步。

双写二级索引
另一种策略是在将数据发布到集群时构建辅助索引(例如,写入数据表,写入索引表)。如果在已存在数据表之后采用这种方法,则对于具有MapReduce作业的辅助索引,将需要进行引导(请参见secondary.indexes.periodic)。

汇总表
在时间范围很广的地方(例如,长达一年的报告),并且数据量很大,因此汇总表是一种常见的方法。这些将通过MapReduce作业生成到另一个表中。

协处理器二级索引
协处理器的行为类似于RDBMS触发器。这些以0.92添加。有关更多信息,请参见协处理器。

举个例子

rk00001     filename:中国好声音第一期,   time:
rk00002     filename:中国花絮			time:		userid:
rk00003     filename:中国好声音第二期	time:      userid:
....
rk01001     filename:中国声音第三期
..............		

需求: 查询filename是中国好声音的所有行的time单元格的数据

因为rowkey不是filename,所以这个查询不太方便,那么我们可以维护一张新表,如下,把rowkey作为value存储.把filename作为key.

另外一张表:
“中国好声音”   filename1: rk00001 
		     filename2: rk00003
		     filename3: rk01001
“中国花絮”	   filename1: rk00002
			  ....

现在第二张表中查询 中国好声音对应的filename,找到其rowkey,然后在根据rowkey取第一张表中查询

什么是二级索引表?

就是在表B中维护另一张表A中的列值与rowkey的映射关系。
在按照指定列查询表A时,先去表B中查询对应的rowkey,然后再返回表A中,通过rowkey查询其他指定字段。表B就是二级索引表,用空间换取时间。

总结

Hbase依据非rowkey字段查询时比较困难,如果列族中某一列是经常用来做筛选条件查询的,可以建立一个二级索引表,把这一列作为key,rowkey作为value新建一张表. 这样就可以查询其他信息

缺点就是两个表未必能同步更新信息.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值