绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
mapdb java_JVM崩溃后MapDb恢复
2022-06-22 14:46:21

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

分享好友

分享这个小栈给你的朋友们,一起进步吧。

MapDB
创建时间:2022-04-13 17:18:51
MapDB
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • LCR_
    专家
戳我,来吐槽~