HBase rowkey 时间戳以及用户UID维度设计

rowkey 为时间以及用户UID,查询条件维度为 时间、UID
有没有一些比较巧妙的设计?
既可以满足UID维度的 索引查询,又可以兼顾时间维度查询的效率
已邀请:

isnker - test

赞同来自: hmaster

单表设计
salt(UID) + time + UID
一般salt的总数量控制在1000以内,如果总数据量大,可以适当增大。

主要有以下3种场景的查询
查询场景1:单个UID在所有时间范围内的查询
查询场景2:时间范围[t1,t2)内所有数据的查询
查询场景3:单个UID在指定时间范围内的查询(1的子集)

1、start设置为salt(UID),stop设置为salt(UID)+Byte.MAX_VALUE, 再设置RowFilter salt(UID)+\d*+UID
2、通过协处理器来实现或者客户端端并发N个(salt的取值范围)scan来查询。每个scan的start为salt+t1 ,stop为salt+t2
3、start设置为salt(UID)+t1,stop设置为salt(UID)+t2, 再设置RowFilter salt(UID)+\d*+UID

ballwql

赞同来自:

对于交易类数据,按uid批量查询指定时间范围的数据是很常见的需求,为方便查询,会把rowkey设计成uid加时间的方式 这样扫描时如上朋友所述 很方便,如起始键:uid#start_time.,结束健:uid#stop_time,uid最好反转后作为rowkey前缀, 不过对于商户这种数据量大的uid,会有热点现象,当前既要兼容批量查询便利性又要考虑热点发生还是比较困难的,对于热点可能可以引入哈希 ,不知道大家有没有更好的方式

要回复问题请先登录注册