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,但它没有给出这个问题的明确答案 .

或者可能有其他方法可以做到这一点?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值