当前位置: 首页 > 分布式系统 > 正文

HBase Rowkey设计

关键字:
1 星2 星3 星4 星5 星 (暂无评分)
Loading ... Loading ...
baidu_share

hbase三维有序存储是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储。

1.rowkey,rowkey是行的主键,hbase只能有一个rowkey通过Get来查数据,或者一个rowkey范围即scan来查找数据。rowkey的设计关系到你应用层的查询效率。rowkey是以字典顺序排序的。字典排序(lexicographical order)是一种对于随机变量形成序列的排序方法。其方法是,按照字母顺序,或者数字小大顺序,由小到大的形成序列。
有两个rowkey,rowkey1:aaa222,rowkey2:bbb111,排列顺序为:aaa222,bbb111.我们在根据rowkey范围查询的时候,如果我们通过scan只传startRowKey : d开头的,那么查询的是所有比d大的都查了,我们只需要d开头的数据,那就要通过endRowKey来限制。

应用场景:某管理系统,需要统计用户id查看过哪些订单id。
如果我们把用户id作为rowkey,用户id以字母开头居多,这样会导致某个字母开头的用户id较多,导致hbase热读和热写。
解决方法:把用户id做md5加密取前5位+用户id作为rowkey。
以上rowkey还有一个问题就是,用户可能对多个订单进行查看,导致列数非常多。例如用户可能查看上万个订单信息,还要记录用户访问时间,访问者ip。那就是3万列。
因此还要对rowkey进行重新设计,用户id做md5加密取前5位+用户id作为rowkey+当前时间精确到分(例如:201510231222),查询时通过scan来进行。

2.column key 数据按rowkey字典排序后,如果rowkey相同,则是根据column key来排序的,也是按字典排序的。

3.timestamp 时间戳,是第三维,这是个按降序排序的,即最新的数据排在最前面。

本文固定链接: http://www.chepoo.com/hbase-rowkey-design.html | IT技术精华网

HBase Rowkey设计:等您坐沙发呢!

发表评论