Hbase 什么';“的意思是什么;主键是“数据”;在柱状数据库中

Hbase 什么';“的意思是什么;主键是“数据”;在柱状数据库中,hbase,column-oriented,Hbase,Column Oriented,在研究面向列的数据库时,我读了很多遍“主键是数据”。(例如,at) 我想我可以按值随机访问任何单元格(在某一列中),因为值,即数据,已经作为主键索引 但在我将超过300万行放入HBase之后, HBase shell命令 scan 'lottery', {COLUMNS => 'cf:status', FILTER => "ValueFilter(=, 'binary:win')"} 需要3秒钟以上 (随着越来越多的行被放置,速度越来越慢…) 'win'或'lose'是列cf:st

在研究面向列的数据库时,我读了很多遍“主键是数据”。(例如,at)

我想我可以按值随机访问任何单元格(在某一列中),因为值,即数据,已经作为主键索引

但在我将超过300万行放入HBase之后, HBase shell命令

scan 'lottery', {COLUMNS => 'cf:status', FILTER => "ValueFilter(=, 'binary:win')"}
需要3秒钟以上

(随着越来越多的行被放置,速度越来越慢…)

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

我可能会误解

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


谢谢。

要使用HBase快速查找内容,它需要是行键的前缀。因此,为了提高速度,rowkey设计非常重要。对于您的情况,您可以在每一行的行键的开头使用值
“彩票中奖”
“彩票输了”
。这将使查询
扫描“彩票中奖”
查询速度非常快(亚秒),即使有数千亿行

HBase中的过滤器通常不是很快,因为过滤器会查看与您扫描的每一行相匹配的内容。如果您想提高速度,让过滤器读取数百万行通常不是一个好主意

DBMS中的主键并不意味着任何有关性能的信息。它是对可以放入表中的记录的约束。给出速度的是一个指数。HBase表只有一个索引项,即行键。没有其他列被索引,因此过滤器速度很慢(以每秒数百万行的顺序)