rowkey保证唯一
rowkey类似于数据库中的主键,可以是一个字段或者多个字段拼接而成
rowkey相同的记录被看作是同一条记录的不同版本,查询会返回最新版本。HBase查询方式分为两种:
- 完整rowkey查询
- 根据rowkey范围查找
select * from table where '123' < rowkey <'123456'
rowkey左侧的值需要已知。
如何实现复杂查询:
1.在建一张表作为索引表,实现双写
2使用filter,在服务端过滤掉不需要的数据
3 使用二级索引
4 如何实现倒序(新的数据排在前面,如:order by orderTime desc):
使用反向scan:scan.setReverse(true)
数据倒序:
[hostname][log-event][timestamp] -> [hostname][log-event][Long.MAX_Value -
timestamp]
3.散列
md5:
[userId][orderid] -> [md5(userId).subStr(0,4)][userId][orderid]
反转:
[userid][orderid] -> [reverse(userid)][orderid]
取模:
[timestamp][hostname][log-event] -> [bucket][timestamp][hostname][log-event]
long bucket = timestamp % num
增加随机数:
[userId][orderid] -> [userId][orderid][random(100)]
4.短rowkey
1.long或int代替String
2 使用编码代替名称