hbase的最佳rowkey设计

时间:2017-04-14 21:27:49

标签: hbase nosql

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

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

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

ID: twsoper
server : AIX230
Date : 2017-05-14
database : Target_DB

如果您使用两者进行过滤而不是

rowkey = shardKey + column + timestamp

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