【问题标题】:Different Columns for Each Row in HBase?HBase中每一行的不同列?
【发布时间】:2019-02-21 09:14:29
【问题描述】:

在我的 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 值时,哪个选项的读取性能更好?

【问题讨论】:

    标签: hadoop time-series hbase


    【解决方案1】:

    HBase 将给定列族的所有记录存储在同一个文件中,因此即使您应用了过滤器,扫描也必须遍历所有键值对。您建议的两种数据存储方式都是如此。

    为获得此特定扫描的最佳性能,您应该考虑将 s2 数据存储在不同的列族中。在底层,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 将只读取包含@​​987654325@ 的数据,从而使操作更快。

    scan 'tb', {COLUMNS => 'cf2', STARTROW=>'1-1040s2', ENDROW=>'1-1044'}
    

    注意事项:

    • 建议每个表只有两个或三个列族,因此如果您想针对s5s75 等运行此查询,则不应执行此操作。在这种情况下,您的复合行键选项更好因为 HBase 只需要查看行键,而不需要查看列限定符。
    • 这取决于您将运行哪些查询,以及运行它们的频率。这是获取与s2 关联的值的最快方式,但对于其他查询可能不是最快的方式。

    【讨论】:

    • 事实上,我想知道当我扫描表时,由于每一行(对于不同的 id)有不同的列,是否会出现任何性能问题。因为,同一列族中可能会有 1000 多个不同的列。但每行最多有 30 列。我知道列或行过滤会导致性能问题。但是我不知道如果背景中的列太多会发生什么。所以,我正在寻找是否可以将这些值(s1、s2、s55 等)放入 rowKey。
    • 过滤和使用复合行键会有所帮助,但最终 HBase 仍然需要读取每一行,除非您通过列族进行物理分离。
    • 那么,在另一个选项中?表格共有 1000 多个不同的列,但每行最多有 30 个不同的行。这个选项有用吗?
    • 一切仍然需要扫描,所以不会有太大区别。您应该选择复合键并接受它不会尽可能快。
    • 非常感谢!
    猜你喜欢
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多