dain / leveldb

Port of LevelDB to Java

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Deleterange

publicocean0 opened this issue · comments

How to delete a range of keys

LevelDB does not support delete range; a delete is like an insert, you need to create a delete entry for each existing key.
You should do something like this to delete a key range:

final DB db = ...;
final byte[] firstKeyOrPreffix = ...;
final Predicate<byte[]> inRange = ...;
try(final DBIterator iterator = db.iterator(); final WriteBatch wb = db.createWriteBatch()) {
    iterator.seek(firstKeyOrPreffix);
    while (iterator.hasNext()) {
        final Map.Entry<byte[], byte[]> next = iterator.next();
        if (!inRange.test(next.getKey())) {
            break;
        }
        wb.delete(next.getKey());
    }
    db.write(wb);
}