在hbase中,未更新的限定符仍然会被逐出吗?

在hbase中,未更新的限定符仍然会被逐出吗?,hbase,Hbase,我在他们的文档中找不到这个。下面是一个例子: 假设我有一个Hbase表,其中有一个列族f,maxVersions设置为2,数据有两个限定符q1和q2。我向其中添加了一行r1,现在我有: r1=>f:q1:ts1 ("some data 1") r1=>f:q2:ts1 ("some data 2") 之后,我执行两次put r1=>f:q1(“其他数据”)。据我所知,q1限定符中的“一些数据1”将被删除,因为有两个新版本写入了q1。但是资格赛q2会发生什么呢?它的数据是因为我添加了

我在他们的文档中找不到这个。下面是一个例子:

假设我有一个Hbase表,其中有一个列族f,maxVersions设置为2,数据有两个限定符q1和q2。我向其中添加了一行r1,现在我有:

r1=>f:q1:ts1 ("some data 1")
r1=>f:q2:ts1 ("some data 2")

之后,我执行两次put r1=>f:q1(“其他数据”)。据我所知,q1限定符中的“一些数据1”将被删除,因为有两个新版本写入了q1。但是资格赛q2会发生什么呢?它的数据是因为我添加了两个新版本的行而被删除的,还是因为只有一个版本(我只在第1季度添加了数据)而保留下来的?

首先HBase不会立即删除旧版本-它们只会在压缩中被删除。大多数操作都会屏蔽旧版本(超过最大版本),但并非所有操作都会屏蔽旧版本,例如

关于您的问题,q2不会受到影响。在每个限定符实例上管理这些版本。您可以在hbase shell中轻松地尝试:

create 't1', {NAME => 'f', VERSIONS => 1}
put 't1', 'r1', 'f:q1', 'some data 1', 1000
put 't1', 'r1', 'f:q2', 'some data 2', 1000
put 't1', 'r1', 'f:q1', 'other data', 2000
scan 't1'

谢谢,这帮了大忙。