hbase的最佳行键设计

hbase的最佳行键设计,hbase,nosql,Hbase,Nosql,我来自sql背景,缺少hbase中的一些基本概念。我将mysql数据分为5列,其中需要两列进行数据过滤。在sql中,查询非常简单,我可以在这两列上放置索引,并可以根据在where子句中为这两列定义的某个范围获取数据 这两列中的数据以单调递增的方式显示,就像时间戳一样。在hbase中设计它的最佳方式是什么。我正在考虑将时间戳作为rowkey,并为热点设置一定的措施。但是对于每个查询,我需要在rowkey中放入范围过滤器,然后扫描结果并基于第二列进行过滤。我不确定这是否足够快。那么,hbase在索引

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

这两列中的数据以单调递增的方式显示,就像时间戳一样。在hbase中设计它的最佳方式是什么。我正在考虑将时间戳作为rowkey,并为热点设置一定的措施。但是对于每个查询,我需要在rowkey中放入范围过滤器,然后扫描结果并基于第二列进行过滤。我不确定这是否足够快。那么,hbase在索引中的等效值是什么呢

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


非常感谢您提供的任何帮助。

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

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

rowkey = shardKey + column + timestamp
如果两者都用于过滤,则

rowKet = shardKey + column1 + column2 +timestamp
在第一种情况下,shardKey可能类似于
hash(column)%number\u of_regions
,而在第二种情况下,
hash(column1+column2)%number\u of_regions
。 因此,您始终可以获得特定column1和column2组合的时间序列数据。或者,如果你需要两个,考虑几个表,因为你要写一次。