删除多个密钥——它可以是事务性的吗?

Deleting multiple keys -- can it be transactional?

这是我们的代码:

@Override
public boolean delete(String instance, final String storeName, 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));
            }
        }
    });
    env.close();
    return isSuccess[0];
}

我有两个问题。

Xodus 是一个符合 ACID 的事务数据库。除其他外,这意味着交易中数据的突变是一致的。在您的情况下,将删除所有指定的键(事务已提交)或没有键(事务中止)。如果事务因某种原因(异常,system/hardware 失败)中断,则不会修改任何内容,事务会自动回滚。