我正在尝试设计一个用于在 HBase 中存储时间序列数据的表。由于一个月内写入的所有数据都将“一次全部”读取以进行分析,我想知道使用月份(作为字符串,如“201501”)作为列族是否是一个好的选择选择。
我的应用程序将在数据到达时使用时间戳保存数据,然后在月底,将使用 hadoop 作业分析与该月相关的所有数据。
根据规范,列族中的所有数据将存储在一起。就 (1) 设计和 (2) 性能而言,这是一个好的做法吗?
我不确定,因为这是一种远离关系世界的选择。
最佳答案
一般来说,HBase 中有很多列族会影响性能。我认为使用 HBase 时不建议使用超过 2 个或 3 个列族。我建议浏览此 link更多细节。
另外,当您创建表时,列族是表架构的一部分。
示例:创建 'hbase_table',{NAME=>'columnFamily',VERSIONS=>3}
因此,如果您希望每个月都有一个新的列族,您将不得不更改表架构以在需要时添加列族,这并不理想。
据我所知,一个好的解决方案是在您的行键中包含日期 ( or reverse timestamp )。
示例:XXX-YYY-20150106
或 XXX-YYY-9223370616269200807
(反向时间戳)
然后,当您要分析 1 个月之间的数据时,您可以扫描表格以查找日期范围。
示例:扫描 'hbase_table',{STARTROW=>'XXX-YYY-20150101', STOPROW=>'XXX-YYY-20150201'}
关于hadoop - 在 HBase 中使用月份作为列族,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27808701/