hbase 的最佳行键设计

Posted

技术标签:

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

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

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

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

非常感谢任何帮助。

【问题讨论】:

【参考方案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中写入所有属性。这不是真的。

【讨论】:

以上是关于hbase 的最佳行键设计的主要内容,如果未能解决你的问题,请参考以下文章

hbase 行键设计

HBase 行键设计

HBase 模式行键设计 - 增量计数器?

大数据最佳实践 | HBase客户端(上)

hbase 利用rowkey设计进行多条件查询

Hbase 性能行键与列限定符