我正在尝试设计一个用于在HBase中存储时间序列数据的表 . 由于所有在一个月内写入的数据都将被读取"all at once"进行分析,我想知道 using the month (as a string, like '201501') as column family 是否是一个不错的选择 .
我的应用程序将在数据到达时以时间戳保存,然后在月末,将使用hadoop作业分析与该月相关的所有数据 .
根据规范,列族中的所有数据将一起存储 . 在(1)设计和(2)性能方面,这是一个很好的做法吗?
我不确定,因为这是远离关系世界的那种选择 .
1 回答
一般来说,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'}