HBase(10)RowKey设计

HBase(10)RowKey设计
ROWKEY设计:

rowkey的索引:位置映射
HBase(10)RowKey设计
一级索引、二级索引
Hbase只能单维度查询,建立多级索引是为了满足多维度查询的需求,实际上HBase的查询维度比较少;以电影案例为例,以id和movie+timestamp建立二级索引,满足两个维度的查询。

合理设计rowkey可以避免热点问题。

以电影案例为例:

{“movie”:“994”,“rate”:“4”,“timeStamp”:“978244540”,“uid”:“3”}
{“movie”:“994”,“rate”:“1”,“timeStamp”:“978246576”,“uid”:“2”}
{“movie”:“994”,“rate”:“4”,“timeStamp”:“978245568”,“uid”:“2”}
{“movie”:“272”,“rate”:“3”,“timeStamp”:“978245487”,“uid”:“1”}
{“movie”:“272”,“rate”:“1”,“timeStamp”:“978242934”,“uid”:“3”}
{“movie”:“348”,“rate”:“3”,“timeStamp”:“978241434”,“uid”:“5”}
{“movie”:“348”,“rate”:“4”,“timeStamp”:“978245863”,“uid”:“3”}

方案一:、
只把电影放前面
K:00994 V:{“movie”:“994”,“rate”:“3”,“timeStamp”:“978242080”,“uid”:“5”}
K:00994 V:{“movie”:“994”,“rate”:“1”,“timeStamp”:“978246576”,“uid”:“2”}
第二条数据的k和第一条数据的k相同,所以会覆盖第一条数据,这样设计是错误的。

以movie+timestamp为K:
K:00994 978242080 V:{“movie”:“994”,“rate”:“3”,“timeStamp”:“978242080”,“uid”:“5”}
K:00994 978246576 V:{“movie”:“994”,“rate”:“1”,“timeStamp”:“978246576”,“uid”:“2”}
这种方案可行
电影不同按电影名排序,电影名相同按timestamp排序
适合按照电影(没有电影热点问题)或者电影+时间 维度查
不适合时间 时间+电影名 、uid、评分等维度的查询

同理:
方案2:u0002m00094 978246576 :按照uid+movie+timestamp来设计

方案3:u0002978246576:uid+timestamp来设计