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 的最佳行键设计的主要内容,如果未能解决你的问题,请参考以下文章