Deleterange
publicocean0 opened this issue · comments
publicocean0 commented
How to delete a range of keys
Honore Vasconcelos commented
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);
}