微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 MapDB wal预写日志文件中恢复数据?

如何解决如何从 MapDB wal预写日志文件中恢复数据?

我的目标是启用 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文件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。