mapdb java_JVM崩溃后MapDb恢复

2022-06-22 00:00:00 数据 专区 订阅 调用 但我

目前我有基于文件从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

相关文章