【问题标题】:Best rowkey design for hbasehbase 的最佳行键设计
【发布时间】:2017-04-14 21:27:48
【问题描述】:

我来自 sql 背景,缺少 hbase 中的一些基本概念。我将 mysql 数据分为 5 列,其中我需要两列进行数据过滤。在 sql 中,查询很简单,我可以在这两列上放置索引,并且可以根据 where 子句中为这两列定义的某个范围获取数据。

这两列的数据是像时间戳一样单调递增的。在 hbase 中设计它的最佳方法是什么?我正在考虑将时间戳作为具有某些热点措施的行键。但是对于每个查询,我需要将范围过滤器放在 rowkey 中,然后扫描结果并根据第二列进行过滤。我不确定这是否足够快。那么索引的 hbase 等价物是什么。

还有一点需要注意的是,我只想加载一次数据,然后只执行读取请求。

非常感谢任何帮助。

【问题讨论】:

    标签: hbase nosql


    【解决方案1】:

    这取决于您最常执行的查询类型。如果您主要需要过滤一列,我建议您将此列与行键中的时间戳放在一起。 例如:

    rowkey = shardKey + column + timestamp
    

    如果你同时使用两者来过滤而不是

    rowKet = shardKey + column1 + column2 +timestamp
    

    在第一种情况下,shardKey 可能应该像hash(column) % number_of_regions,其次是hash(column1 + column2) % number_of_regions。 因此,您始终可以获取特定 column1 和 column2 组合的时间序列数据。或者如果你需要两者,考虑有几个表,因为你要写一次。

    【讨论】:

      【解决方案2】:

      RowKey 需要对您来说是唯一的。是的,您可以为此计时,但我认为您应该使用带有时间戳的其他参数。例如;时间戳+用户 ID。这对你来说是安全的。认为您有许多 hbase 客户端,他们编写了一个 hbase 服务器。 2个客户端可以同时写入hbase服务器。当然你不需要在你的rowkey中写入所有属性。这不是真的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-31
        • 1970-01-01
        • 2013-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多