在 HBase 中使用月份作为列族

Using month as column family in HBase

我正在尝试设计一个 table 用于在 HBase 中存储时间序列数据。由于一个月内写入的所有数据都将被读取 "all at once" 进行分析,我想知道是否 使用月份(作为字符串,如 '201501')作为列族 是个不错的选择。

我的应用程序将在数据到达时保存带有时间戳的数据,然后在月底,将使用 hadoop 作业分析与该月相关的所有数据。

根据规范,列族中的所有数据将存储在一起。就 (1) 设计和 (2) 性能而言,这是一个好的做法吗?

我不确定,因为这是一种远离关系世界的选择。

一般来说,HBase 中有很多列族会影响性能。我认为使用 HBase 时不建议使用超过 2 个或 3 个列族。我建议浏览此 link 以了解更多详细信息。

此外,当您创建 table 时,列族是 table 架构的一部分。

示例:create 'hbase_table',{NAME=>'columnFamily',VERSIONS=>3}

因此,如果您希望每个月都有一个新的列族,则必须更改 table 架构以在需要时添加列族,这并不理想。

根据我的说法,一个好的解决方案是在您的 rowkey 中包含日期 (or reverse timestamp)。 示例:XXX-YYY-20150106XXX-YYY-9223370616269200807(反向时间戳)

然后,当你想分析1个月之间的数据时,你可以扫描table的日期范围。 示例:scan 'hbase_table',{STARTROW=>'XXX-YYY-20150101', STOPROW=>'XXX-YYY-20150201'}