根据我的理解,habase应该遍历hfile的一部分以便找到所需的数据。我做了以下经验:
我使用以下命令创建表:
create 'test', {'NAME' => 'cf', VERSIONS => 1}
然后我插入一行:
put 'test', 'row1', 'cf:a', 'data1'
从get命令get 'row1'
可以看到以下输出:
COLUMN CELL
cf:a timestamp= 1520570145471, value=data1
之后我插入了大量数据,以便让hbase将数据刷新到hfile,总计100000行,并按如下命令刷新:
flush 'test'
最后我通过以下命令更新首先插入的行:
put 'test', 'row1', 'cf:a', 'data2', 1520570145371
您必须注意的是更新时间戳小于上一个时间戳。然后我发现hbase也可以找到大版本的数据,hbase怎么办呢?是否hbase扫描所有hfile以找到该行的所有版本?
答案 0 :(得分:0)
根据docs,A {row,column,version}元组确切地指定了HBase中的一个单元格。 HBase版本维度按递减顺序存储,因此从存储文件读取时,首先会找到最新值。
默认情况下,在执行get时,将返回版本具有最大值的单元格(可能是也可能不是最新编写的单元格)。