我试图在没有设置配置持久写入的情况下刷新磁盘事务。
可以命令仅针对特定事务进行刷新吗?
答案 0 :(得分:1)
说到Environments API,无法将特定事务配置为持久。
有一个解决方法:您可以在刷新或提交事务后手动调用EnvironmentImpl#flushAndSync()
方法。该方法刷新未刷新的数据并强制OS将修改的文件和目录结构同步到存储设备。但是,在调用EnvironmentImpl#flushAndSync()
方法之前刷新/提交事务之后,可以进行另一个事务并且可以进行并行执行。要解决竞争,可以使用commit hook。对于给定的Transaction txn
和EnvironmentImpl env
,请定义以下提交挂钩:
txn.setCommitHook(new Runnable() {
@Override
public void run() {
env.flushAndSync();
}
});
将EnvironmentImpl#flushAndSync()
方法暴露给API可能是有意义的。