我正在尝试设计一个表,用于在hbase中存储时间序列数据。由于一个月内写入的所有数据都将“一次全部”读取以进行分析,因此我想知道使用月份(作为字符串,如“201501”)作为列族是否是一个好的选择。我的应用程序将在数据到达时保存时间戳,然后,在月末,所有与该月相关的数据都将使用hadoop作业进行分析。根据规范,列族中的所有数据将存储在一起。在(1)设计和(2)性能方面,这是一个好的实践吗?我不确定,因为这是一种远离关系世界的选择。
92vpleto1#
一般来说,hbase中有许多列族会影响性能。我认为在使用hbase时,不建议使用超过2或3个列族。我建议你浏览这个链接来了解更多的细节。此外,在创建表时,列族也是表架构的一部分。例子: create 'hbase_table',{NAME=>'columnFamily',VERSIONS=>3} 因此,如果您希望每个月都有一个新的列族,则必须在需要时更改表模式以添加列族,这并不理想。据我所知,一个好的解决方案是在rowkey中有日期(或反向时间戳)。例子: XXX-YYY-20150106 或者 XXX-YYY-9223370616269200807 (反向时间戳)然后,当您想分析1个月之间的数据时,您可以扫描表中的日期范围。例子: scan 'hbase_table',{STARTROW=>'XXX-YYY-20150101', STOPROW=>'XXX-YYY-20150201'}
create 'hbase_table',{NAME=>'columnFamily',VERSIONS=>3}
XXX-YYY-20150106
XXX-YYY-9223370616269200807
scan 'hbase_table',{STARTROW=>'XXX-YYY-20150101', STOPROW=>'XXX-YYY-20150201'}
1条答案
按热度按时间92vpleto1#
一般来说,hbase中有许多列族会影响性能。我认为在使用hbase时,不建议使用超过2或3个列族。我建议你浏览这个链接来了解更多的细节。
此外,在创建表时,列族也是表架构的一部分。
例子:
create 'hbase_table',{NAME=>'columnFamily',VERSIONS=>3}
因此,如果您希望每个月都有一个新的列族,则必须在需要时更改表模式以添加列族,这并不理想。据我所知,一个好的解决方案是在rowkey中有日期(或反向时间戳)。例子:
XXX-YYY-20150106
或者XXX-YYY-9223370616269200807
(反向时间戳)然后,当您想分析1个月之间的数据时,您可以扫描表中的日期范围。例子:
scan 'hbase_table',{STARTROW=>'XXX-YYY-20150101', STOPROW=>'XXX-YYY-20150201'}