在研究面向列的数据库时,我读了很多遍“主键是数据”(e、 例如,面向列的数据库管理系统)
我想我可以按值随机访问任何单元格(在某一列中),因为值,即数据,已经作为主键索引。
但是在我将超过3m行放入hbase之后,hbase shell命令
scan 'lottery', {COLUMNS => 'cf:status', FILTER => "ValueFilter(=, 'binary:win')"}
需要3秒以上。。。
(随着越来越多的行被放进去,速度越来越慢……) 'win'
或者 'lose'
列有两个可能的值 cf:status
只有一行的值是 'win'
.
我可能误解了。。。
在面向列的数据库中,“主键是数据”是什么意思?
谢谢您。
1条答案
按热度按时间unguejic1#
要使用hbase快速查找内容,它需要是rowkey的前缀。因此,rowkey设计是非常重要的建设时,速度。对于您的情况,可以使用
'lottery_win'
或者'lottery_lose'
在每行的rowkey的开头。这将使查询scan 'lottery_win'
查询速度非常快(亚秒),即使有上千亿行。hbase中的过滤器通常不是很快,因为过滤器会查看与您扫描的每一行相匹配的内容。如果您想提高速度,让一个过滤器读取数百万行通常不是一个好主意。
dbms中的主键并不意味着任何关于性能的东西。它是对可以放入表中的记录的约束。给出速度的是一个指数。hbase表只有一个索引项,即rowkey。没有其他列被索引,因此筛选器速度很慢(以每秒数百万行的顺序)。