HBase (and BigTable) use delete markers (or tombstones). As you say, once written, all data is immutable.
These markers look very similar to normal Put operations but the HBase server logic processes them in a special way and when we see delete markers we will appropriate mask (not return or make visible) data which has been deleted.
See the Delete class for the specific delete APIs supported.
As Ted says, during compactions, this deleted data (masked by the delete markers) will be permanently deleted and not included in the new compacted file.
Check out the BigTable paper for more information.
> -----Original Message-----
> From: Ted Yu [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, January 20, 2011 8:25 AM
> To: [EMAIL PROTECTED]
> Subject: Re: Question about HBase Delete
> The actual deletion happens after compaction.
> On Thu, Jan 20, 2011 at 8:01 AM, mac fang <[EMAIL PROTECTED]> wrote:
> > Hi, guys,
> > I read the HBase code and found the delete interface only delete the
> > keyValue in the MemoryStore, but NOT really remove the keyValue in the
> > SequenceFile, only invoke the
> > this.writer.append(logKey, logEdit);
> > will it remove the index in the SequenceFile. And I saw the BigTable
> > design and seems it looks like a immutable system which you even can
> > NOT delete a file. How the delete/update can be achieved in HBase
> > system? Any hints are welcome!
> > regards
> > macf