列式数据库中“主键是数据”的含义是什么

时间:2019-09-06 06:43:01

标签: hbase column-oriented

在研究面向列的DB时,我多次阅读了“主键是数据”。 (例如,在Column-oriented DBMS处)

我认为我可以按值随机访问任何单元格(在特定列中),因为值(即数据)已被索引为主键。

但是在我将超过3M行放入HBase之后, HBase shell命令

scan 'lottery', {COLUMNS => 'cf:status', FILTER => "ValueFilter(=, 'binary:win')"}

需要3秒钟以上的时间...

(随着越来越多的行放置,它变得越来越慢...)

'win''lose'是列cf:status的两个可能值,并且只有1行的值为'win'

我可能会误会...

在面向列的数据库中,“主键是数据”是什么意思?

谢谢。

1 个答案:

答案 0 :(得分:1)

要能够使用HBase快速找到某些内容,它必须是行键的前缀。因此,行键设计对于提高速度至关重要。对于您的情况,可以在每行的行键的开头使用值'lottery_win''lottery_lose'。这将使查询scan 'lottery_win'的查询速度非常快(不到一秒),即使有数千亿行。

HBase中的

过滤器通常不是很快,因为过滤器会查看与您扫描匹配的每一行。如果要提高速度,通常不建议让过滤器读取数百万行的数据。

DBMS中的

主键并不暗示任何有关性能的信息。这是对您可以放入表中的记录的约束。给出速度的是 index 。一个HBase表只有一个索引项-这就是行键。没有其他列被索引,因此过滤器运行缓慢(每秒数百万行)。