我正在尝试设计一个用于在HBase中存储时间序列数据的表。由于所有在一个月内写入的数据都将被一次性读取并且#34;为了进行分析,我想知道使用月份(作为字符串,例如' 201501')作为列族是否是一个不错的选择。
我的应用程序将在数据到达时以时间戳保存,然后在月末,将使用hadoop作业分析与该月相关的所有数据。
根据规范,列族中的所有数据将一起存储。在(1)设计和(2)性能方面,这是一个很好的做法吗?
我不确定,因为这是远离关系世界的那种选择。
答案 0 :(得分:2)
一般情况下,HBase中有许多列族会损害性能。我认为使用HBase时不建议使用超过2或3个列族。我建议浏览此link以获取更多详细信息。
此外,在创建表时,列族是表模式的一部分。
示例:create 'hbase_table',{NAME=>'columnFamily',VERSIONS=>3}
因此,如果您希望每个月都有一个新的列系列,那么您将不得不在需要时更改表架构以添加列族,这并不理想。
据我所知,这里一个很好的解决方案是在你的rowkey中加上日期(or reverse timestamp)。
示例:XXX-YYY-20150106
或XXX-YYY-9223370616269200807
(反向时间戳)
然后,当您想要在1个月之间分析数据时,您可以扫描表格中的日期范围。
示例:scan 'hbase_table',{STARTROW=>'XXX-YYY-20150101', STOPROW=>'XXX-YYY-20150201'}