To me this is all nice and straightforward except for the merge i.e. when does it happen? Magically in the background or only at restart.
In either case then the question is how does this affect the responsiveness of the system.
This paper http://downloads.basho.com/papers/bitcask-intro.pdf is a nice easy ready with another level of detail over the linked to article.
I suspect they could consider - varint encoding of the key and value sizes on disk - aligning some writes to disk block boundaries to avoid spanning 2 blocks
though both probably only have minor gains.
For more inspiration see Jeff Dean's comments on the SSTable data structure at Google: http://osdi2006.blogspot.com/2006/10/paper-bigtable-distribu...