Berkeley JE StoredMap: заменить существующее значение без загрузки предыдущего

Я хочу обновить значение StoredMap, и меня не волнует старое значение. Я не могу найти способ избежать загрузки предыдущего значения.

StoredMap<Integer, SyntaxDocument> tsCol = new StoredMap<Integer, SyntaxDocument>(tsdb, new IntegerBinding(), new PassageBinding(), true);
tsCol.put(1, doc); // insert value => ok
tsCol.put(1, doc); // <- load previous value but I don't care. I want to avoid the "heavy" PassageBinding process.
tsCol.putAll(Collections.singletonMap(1, doc)); // Even this one load the old value

Есть ли способ оптимизировать мой код и обновить существующее значение, не загружая его (или, по крайней мере, предотвратить привязку к обработке старых байтов DatabaseEntry)?

ВНИМАНИЕ: что вызов удалить, а затем положить медленнее.

1 ответ

Решение

Решение состоит в том, чтобы использовать API базы данных низкого уровня:

Database tsdb = environment.openDatabase(null, "tsdb", dbconfig);
PassageBinding binding = new PassageBinding();
DatabaseEntry idDbEntry = new DatabaseEntry();

IntegerBinding.intToEntry(id, idDbEntry);
DatabaseEntry dbEntry = new DatabaseEntry();
pb.objectToEntry(data, dbEntry);

tsdb.put(null, idDbEntry, dbEntry); // <-- replace existing value without loading it.
Другие вопросы по тегам