HBase的删除addColumn与addColumns的区别

大家都知道,hbase存储数据是按照版本存储的,并且是按照时间戳决定的版本,只有时间戳最新的版本才有效。。

 

如果表中的数据存在多个版本,那么按时间戳从小到大排序来看。。

 

一、addColumn() 只删除等于给定时间戳的版本。是添加一个类型为delete的版本数据。。

举个栗子:

比如原有三个版本,都是表示数据类型的,时间戳假设是1,5,8三个。

而addColumn指定了时间戳是5,那么hbas就会新增一个时间戳为5的delete版本,

然后一共有4个版本,1,5,5(delete),8..

那么5(delete)表示删除的5这个版本。。。

当然,由于最新版的还是8,所以get和scan查询出来的是8这个版本的数据。

如果没有8这个版本,即添加了5(delete)之后的有1,5,5(delete)三个版本,那么5(delete)还是表示删除5这个版本,然后get或者scan查询的数据将会是1这个版本的数据value。

有个坑希望大家注意!!!

(emm,这个坑是我没认真看注释。。。)

Delete.addColumn重载方法有两个,一个两个参数的(不指定时间戳),另一个是由调用者传入时间戳的。。

我要说的坑就是,两个参数(不传入时间戳的那个),

本来Put.addColumn不传时间戳,会使用当前时间作为这个版本的时间戳。。

然后我也以为Delete.addColumn不传入时间戳也是如此,结果碰到了问题不符合我调用的初衷,然后测试了几遍,

发现,使用Delete.addColumn不传入时间戳时,当前添加的delete类型的数据会使用上一个版本的数据的时间戳。。。也就说,如果不传入时间戳,那么就会删除最新版本的数据。。

如下图:

其中,下面的value=zld2是先put进来的数据。。。过了一会之后,我再用Delete.addColumn不传入时间戳的方法删除该cell,然后看上面的图,type=Delete的时间戳和value=zld2的一样。。。

 

二、addColumns() 删除给定列的所有小于等于给定的时间戳版本的数据。即添加一个版本,类型为deleteColumn。

get或者scan时,小于该deleteColumn数据版本的所有数据都是不可见的


 

你可能感兴趣的:(hbase)