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字节)?

注意:调用remove-then-put比较慢。

解决方案是使用低级数据库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.

相关内容

  • 没有找到相关文章

最新更新