博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HBase存储时间相关多列数据的两种方案
阅读量:6336 次
发布时间:2019-06-22

本文共 1429 字,大约阅读时间需要 4 分钟。

所谓“时间相关多列数据”指的是同一个Key下具有多个属性数据,并且这些数据与时间具有相关性,多数场景是该Key对应在不同时间时刻的行为数据。在实际应用中,这类数据很多,例如电子商务网站上用户最近一段时间浏览的宝贝集合、访问的URL列表等。

使用HBase存储此类数据时,有以下两种常用的方案:

多行单列

表结构设计

Row Key:用户标识ID + (Long.MAX_VALUE - timestamp)

Column Family:’cf’

Column Qualifier:’’

Value:宝贝、URL等

其中,使用(Long.MAX_VALUE – timestamp)作为Row Key的后半部分是为了便于获取最近插入的数据,一个用户标识ID下的数据存储在多个Row Key下,每个Row Key下仅有一个Column Qualifier,表示该用户的一次时间相关的访问数据(访问宝贝、URL等)。

查询方式

1)查询某个特定timestamp下的记录,则使用用户标识ID + (Long.MAX_VALUE - timestamp)进行Get查找;

2)查询某个用户标识ID下所有的记录,则通过Scan.setStartRow(uid)和Scan.setStopRow(uid+1)进行Scan查找;

3)查询某个用户标识ID下最近时间内的N条记录,则通过Scan.setStartRow(uid)和Scan.setStopRow(uid+1)进行Scan查找,但是为了只获取N条记录,可以设置Scan.setCaching(N)优化查询,同时做一次ResultScanner.next(N)得到结果。

单行多列

表结构设计

Row Key:用户标识ID

Column Family:’cf’

Column Qualifier:(Long.MAX_VALUE - timestamp)

Value:宝贝、URL等

其中,使用(Long.MAX_VALUE – timestamp)作为Column Qualifier是为了便于获取最近插入的数据,一个用户标识ID下的数据存储在一个Row Key下,每个Row Key下会有多个Column Qualifier,表示该用户的所有时间相关的访问数据(访问宝贝、URL等)。

查询方式

1)查询某个特定timestamp下的记录,则使用用户标识ID进行Get查找,同时通过Get.addColumn(‘cf’, (Long.MAX_VALUE – timestamp))方法限定要查询的Column Qualifier;

2)查询某个用户标识ID下所有的记录,则直接使用用户标识ID进行Get查找,通过Get.addFamily(‘cf’)方法添加整个Column Family;

3)查询某个用户标识ID下最近时间内的N条记录,则直接使用用户标识ID进行Get查找,通过Get.addFamily(‘cf’)方法添加整个Column Family,通过(int N)限制最多要查询返回N条记录。

总结

两种方式都能满足以上基本的查询需求,但由于目前HBase在单行多列的场景下,读写性能都有一定的衰减(具体情况请关注博客,后续会对这块给出详细的性能测试),因此,个人建议采取第一种方案,如果确定Column Qualifier个数很少(例如2~10个),或者有其他特殊需求的话,也可采取第二种方案。

 

转载地址:http://asxoa.baihongyu.com/

你可能感兴趣的文章
HDU-1394-Minimum Inversion Number
查看>>
df -h 卡住
查看>>
[转] createObjectURL方法 实现本地图片预览
查看>>
JavaScript—DOM编程核心.
查看>>
JavaScript碎片
查看>>
Bootstrap-下拉菜单
查看>>
soapUi 接口测试
查看>>
【c学习-12】
查看>>
工作中MySql的了解到的小技巧
查看>>
loadrunner-2-12日志解析
查看>>
C# Memcached缓存
查看>>
iOS开发NSLayoutConstraint代码自动布局
查看>>
正则表达式
查看>>
mysql [ERROR] Can't create IP socket: Permission denied
查看>>
PBRT笔记(4)——颜色和辐射度
查看>>
CustomView的手势缩放总结
查看>>
linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹
查看>>
CentOS yum安装mysql
查看>>
OceanBase笔记1:代码规范
查看>>
[Algorithms] Longest Increasing Subsequence
查看>>