hbase的最佳rowkey设计

yqlxgs2m  于 2021-06-09  发布在  Hbase
关注(0)|答案(2)|浏览(309)

我来自sql背景,缺少hbase中的一些基本概念。我有我的mysql数据分为5列,其中我需要两列数据过滤。在sql中,查询非常简单,我可以在这两列上放置索引,并可以根据where子句中为这两列定义的某个范围获取数据。
这两列中的数据是单调递增的,就像时间戳一样。在hbase中设计它的最佳方法是什么。我正在考虑将timestamp作为rowkey,并带有一定的热点度量。但是对于每个查询,我需要在rowkey中放入range filter,然后扫描结果并基于第二列进行筛选。我不确定这是否足够快。那么,hbase在索引方面的等价物是什么呢。
还有一点需要注意,我只想加载一次数据,然后只执行读取请求。
非常感谢您的帮助。

c86crjj0

c86crjj01#

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

rowkey = shardKey + column + timestamp

如果两者都用于过滤,则

rowKet = shardKey + column1 + column2 +timestamp

在最初的情况下,沙德基可能应该是这样的 hash(column) % number_of_regions ,秒 hash(column1 + column2) % number_of_regions . 因此,您总是可以获得特定column1和column2组合的时间序列数据。或者如果两者都需要,可以考虑使用多个表,因为只需编写一次。

bejyjqdl

bejyjqdl2#

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

相关问题