mapdb java_JVM崩溃后MapDb恢复
目前我有基于文件从mapDb创建的hashmap . 我正在使用这个 Map 在服务器上本地保存一些数据(我不需要其他服务器来访问这些数据),所以我需要在jvm重启后这些数据可用 . 这非常有效 .
但是,当jvm死亡时,我还需要报道一个案例 . 这意味着我们不能保证将调用db.close(),但我仍然需要在恢复后检索数据 .
这是创建 Map 的方式:
DB db = DBMaker
.fileDB(storagePath)
.closeOnJvmShutdown()
.fileMmapEnableIfSupported()
.fileMmapPreclearDisable()
//.checksumHeaderBypass()
//.transactionEnable()
.allocateStartSize(entries * avgEntrySize)
.make();
db.getStore().fileLoad();
Map map = db.hashMap("map", Serializer.LONG, Serializer.ELSA).createOrOpen();
我找到了两种方法:
创建 db 时
添加 checksumHeaderBypass 选项,但我想知道后果会是什么?在这种情况下,db可以在恢复后返回一些不一致的数据吗?我问,因为作为替代方案我使用 chronicleMap 并且它也有一个 close() 方法,但它不强制在重新启动jvm之前执行此调用 .
添加 transactionEnable 选项,但是我需要在每次更新后调用 commit 或实现一些wrapper来执行此操作 . 但问题是 commit 在每次通话中实际上做了什么?以及它将如何影响性能?它会将mmaped文件刷新到磁盘吗?我正在使用mmaped文件,因为我需要真正快速访问数据 . 部分关于 commit 写的是here,但它没有给出这个问题的明确答案 .
或者可能有其他方法可以做到这一点?
————————————————
版权声明:本文为CSDN博主「樱桃Anne」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42521424/article/details/114732226
相关文章