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.