java - Xodus中的put和delete都可以是事务吗?

标签 java xodus

这是我们代码中的批处理方法:

@Override
public boolean batchPutDelete(String instance, final String storeName, final Map<String, String> properties, final String... keys) {
    final Boolean[] isSuccess = {false};
    final List<String> keyList = Arrays.asList(keys);
    final Environment env = Environments.newInstance(xodusRoot + instance);
    env.executeInTransaction(new TransactionalExecutable() {
        @Override
        public void execute(@NotNull final Transaction txn) {
            final Store store = env.openStore(storeName, StoreConfig.WITHOUT_DUPLICATES, txn);
            for (String key : keyList) {
                isSuccess[0] = store.delete(txn, StringBinding.stringToEntry(key));
            }
            Iterator<String> it = properties.keySet().iterator();
            while (it.hasNext()) {
                String key = it.next();
                String string = properties.get(key);
                isSuccess[0] = store.put(txn, StringBinding.stringToEntry(key), StringBinding.stringToEntry(string));
            }
        }
    });
    env.close();
    return isSuccess[0];
}

我想问一下这段代码是如何事务性的,delete和put都可以是事务性的吗?此方法的目的是首先删除现有的键,然后用不同的值再次放入它,其目的是它应该是事务,因此任何删除或添加在循环中失败,它应该回滚。这段代码已经这样做了吗?

最佳答案

是的,事务要么提交所有更改,要么什么都不提交。此外,您不必在为键添加新值之前删除键。

关于java - Xodus中的put和delete都可以是事务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51830897/

相关文章:

java - View 的 contentDescription 不能与 TextToSpeech 一起正常工作

java - 如何从 `txn.getAll("Entity")` 方法获取子集结果?

java - 如何在Java中导入Xodus?

java - Java 中的验证框架

java - 我如何处理 pom.xml 文件?

java - 图轴问题

java - Xodus - 从备份恢复环境/目录

java - 将 null 存储为实体属性的值?

java - 不关闭环境或实体存储是否安全?

java - 如何通过键从gson对象获取值