天天看点

Hypertable在Delete命令后执行Insert命令时应该注意的问题

      Delete命令适用于一个单独的row,对于指定的row,它可以删除一个CQ的所有CELL,一个CF的所有CELL,或者一个row的所有CELL。如果指定了TIMESTAMP子句,将会删除TIMESTAMP小于或者等于给定值的CELL。否则,将自动分配当前时间作为TIMESTAMP子句。

      Delete在删除时,将会插入一个删除标记,即此时为逻辑删除。删除标记持久的存在于库中,除非一个major compaction操作发生,此时将执行物理删除。删除标记将会删除同一row下,TIMESTAMP早于删除标记对应的TIMESTAMP的记录。

      如果在执行了Delete命令后,再执行Insert命令,并且Insert命令中的TIMESTAMP小于Delete命令中的TIMESTAMP,则会出现不能插入的情况。例如:

delete * from test where row = "row1" TIMESTAMP “2012-11-11 00:00:00”   或者  delete * from test where row = "row1"  //TIMESTAMP 默认为当前时间,假设当前时间为 “2012-11-11 00:00:00” ;

insert into test values ("2012-11-10 00:00:00", "row1", "foo", "bar")    //此CELL不能被插入;

      当然,如果Insert命令不带TIMESTAMP的话,则应该可以正常执行,因为Insert时的TIMESTAMP默认为当前时间,其应该晚于Delete命令中的TIMESTAMP。