Hbase 性能行键与列限定符

Posted

技术标签:

【中文标题】Hbase 性能行键与列限定符【英文标题】:Hbase performance rowkey vs column qualifiers 【发布时间】:2017-01-23 10:01:54 【问题描述】:

问题:我需要在每小时和每天之后在 Hbase 中插入一些用户 ID(例如:2201201711,这代表 2017 年 1 月 22 日:上午 11 点数据)。如果我想在某个日期或数据和时间范围内获取特定小时的所有用户 ID,那么表的设计应该是什么。

到目前为止我所做的,我将用户 ID 保留为行键,并在运行时在同一列族中创建列。 文件数据: 用户名 |约会时间 1 2201201711 2 2201201711 3 2201201711

我的 hbase 行键将是 1、2 和 3,并且将创建新列 2201201711。

我知道我可以使用使用日期、小时和用户 ID 的复合键。但我想了解它在性能方面提供了什么好处。

如果我选择一整列(没有任何过滤器)与使用复合行键查找,性能差异是什么。

【问题讨论】:

【参考方案1】:

解决方案可能会有所不同,具体取决于您要放入此表的数据量以及您经常读取此表的方式(扫描或获取)。

我的解决方案会考虑到,这个表会很大,并且经常会在这个表上执行扫描:

数据时间部分可以转换为EPOCH,转换后的值可以用作表的rowKey,用户ID可以保留在列限定符中。通过这种方式,当您想要使用 Scan 中的 startRow 和 endRow 扫描整个表以查找特定日期时间范围时,它会很有效。据我所见,当我们以这种方式扫描一个巨大的表时,scan 的性能会更好,因为它会跳过 startRowKey 和 endRowKey 之前和之后的记录。

【讨论】:

以上是关于Hbase 性能行键与列限定符的主要内容,如果未能解决你的问题,请参考以下文章

使用java检索hbase中的第n个限定符

使用java检索hbase中的任何三个随机限定符

HBase:使用限定符和值的过滤器扫描时如何获得完整的行?

HBase系统架构及数据结构

HBase 系统架构及数据结构

资源: 资源限定符概述, 资源限定符示例