leveldb icon indicating copy to clipboard operation
leveldb copied to clipboard

Deleterange

Open publicocean0 opened this issue 7 years ago • 1 comments

How to delete a range of keys

publicocean0 avatar Dec 10 '17 09:12 publicocean0

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);
}

pcmind avatar Jan 02 '18 10:01 pcmind