【发布时间】:2021-06-27 20:53:04
【问题描述】:
我的目标是启用 MapDB 崩溃保护,如果发生崩溃,如何恢复数据。
我已为 MapDB 启用事务
DB db;
HTreeMap< String, String > mapDb;
db = DBMaker.fileDB( "walTest/file1.db" )
.transactionEnable()
.allocateStartSize( 64 *1024 *1024 )
.allocateIncrement( 32 *1024 *1024 )
.fileMmapEnable()
.fileMmapEnableIfSupported()
.fileMmapPreclearDisable()
.cleanerHackEnable()
.closeOnJvmShutdown()
.make();
mapDb = db.hashMap( "Test" ) //$NON-NLS-1$
.keySerializer( Serializer.STRING )
.valueSerializer( Serializer.STRING )
.createOrOpen();
for(int i=0; i<10000;i++)
{
mapDb.put(""+i, "aaaaaaaaaaa bbbbbbbbbbbbbbbbbb cccccccccccccccccccc dddddddddddddddddd");
if(i % 100 == 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(i == 5000)
{
db.commit();
}
}
我看到它创建了 2 个文件,file1.db 和 file1.db.wal.0
现在,我重新启动服务器并使用以下代码读取 MapDB
System.out.println(mapDb.size());
输出为 5001 其他未提交的 5000 个未恢复。
我在执行 mapDb.size() 之前尝试使用 db.commit,但它仍然没有帮助。
那么,wal 文件如何防止服务器或 jvm 崩溃? 我们如何恢复 wal 文件?
【问题讨论】:
标签: java restore jvm-crash wal mapdb