删除多个密钥-可以交易吗?

时间:2018-08-13 21:01:31

标签: java xodus

这是我们的代码:

@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];
}

对此我有两个问题。

  • 这是事务性的,因为此功能用于删除多个 键,如果一个键无法删除其他键,是否可以正常工作 将不会被删除。喜欢全部还是全不喜欢?
  • 如果在txn中由于某种原因(例如key或storeName为null)发生了异常,应如何处理?还是没有关系,因为如果有异常,交易会失败并自动回滚?

1 个答案:

答案 0 :(得分:2)

Xodus是符合ACID的交易数据库。除其他外,这意味着事务中的数据突变是一致的。在您的情况下,要么删除所有指定的键(提交事务),要么不删除任何键(事务中止)。如果事务由于某种原因(异常,系统/硬件故障)而中断,则不会进行任何修改,并且事务会自动回滚。