Hadoop HBase中每行的不同列?
在我的HBase表中,每一行可能有不同于其他行的列。比如,Hadoop HBase中每行的不同列?,hadoop,time-series,hbase,Hadoop,Time Series,Hbase,在我的HBase表中,每一行可能有不同于其他行的列。比如, ROW COLUMN 1-1040 cf:s1 1-1040 cf:s2 1-1043 cf:s2 2-1040 cf:s5 2-1045 cf:s99 3-1040
ROW COLUMN
1-1040 cf:s1
1-1040 cf:s2
1-1043 cf:s2
2-1040 cf:s5
2-1045 cf:s99
3-1040 cf:s75
3-1042 cf:s135
如上所示,每一行的列都不同于其他行。所以,当我像这样运行扫描查询时
扫描'tb',{COLUMNS=>'cf:s2',STARTROW=>'1-1040',ENDROW=>'1-1044'}
我想使用上面的查询获得cf:s2值。但是,由于每行有不同的列,是否会出现性能问题
另一种选择强>
ROW COLUMN
1-1040-s1 cf:value
1-1040-s2 cf:value
1-1043-s2 cf:value
2-1040-s5 cf:value
2-1045-s99 cf:value
3-1040-s75 cf:value
3-1042-s135 cf:value
在这个选项中,当我想要得到介于1-1040和1-1044之间的s2值时,我正在为此运行这个查询
扫描'tb',{STARTROW=>'1-1040s2',ENDROW=>'1-1044',FILTER=>“RowFilter=,'substring:s2')”}
当我想要获得s2值时,哪个选项的读取性能更好 HBase将给定列族的所有记录存储在同一个文件中,因此扫描必须在所有键值对上运行,即使应用了筛选器也是如此。您建议的存储数据的两种方法都是如此 <> P>对于这种特定扫描的最佳性能,您应该考虑在不同的列族中存储<代码> S2< /Cord>数据。在引擎盖下,HBase将以以下方式存储您的数据: 一个文件:
1-1040 cf1:s1
2-1040 cf1:s5
2-1045 cf1:s99
3-1040 cf1:s75
3-1042 cf1:s135
另一个文件:
1-1040 cf2:s2
1-1043 cf2:s2
然后,您可以只在cf2
上运行扫描,HBase将只读取包含s2
的数据,从而使操作更快
scan 'tb', {COLUMNS => 'cf2', STARTROW=>'1-1040s2', ENDROW=>'1-1044'}
考虑事项:
- 建议每个表只包含两个或三个列族,因此如果要对
、s5
等运行此查询,则不应实现此功能。在这种情况下,复合行键选项更好,因为HBase只需查看行键,而不需要查看列限定符s75
- 这取决于您将运行哪些查询,以及运行它们的频率。这是获取与
关联的值的最快方法,但对于其他查询可能不是最快的方法s2