Hadoop 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

在我的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                    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
    s75
    等运行此查询,则不应实现此功能。在这种情况下,复合行键选项更好,因为HBase只需查看行键,而不需要查看列限定符
  • 这取决于您将运行哪些查询,以及运行它们的频率。这是获取与
    s2
    关联的值的最快方法,但对于其他查询可能不是最快的方法

事实上,我想知道在扫描表时,由于每行(针对不同ID)具有不同的列,是否会出现性能问题。因为,同一列族中可能会有1000多个不同的列。但每行最多有30列。我知道列或行过滤将导致性能问题。但我不知道如果背景中有太多的专栏会发生什么。因此,我正在考虑是否可以将这些值(s1、s2、s55等)放入rowKey。筛选和使用复合rowKey会有一些帮助,但在一天结束时,HBase仍然必须读取每一行,除非您通过列族进行物理分离。那么,在另一个选项中?表总共有1000多个不同的列,但每行最多有30个不同的行。这个选项有用吗?所有的东西都需要扫描,所以不会有太大的区别。您应该选择一个复合密钥,并接受它不会像可能的那样快。非常感谢!