首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效地使用MapDB (混淆提交)

高效地使用MapDB (混淆提交)
EN

Stack Overflow用户
提问于 2013-08-19 19:58:51
回答 2查看 3.1K关注 0票数 10

我在一个项目中使用MapDB,该项目处理需要映射/排队的数十亿对象。在程序完成后,我不需要任何形式的持久性( MapDB数据库都是临时的)。我希望该程序能够尽快运行,但我对MapDB的commit()函数感到困惑(我认为它与性能相关),即使在阅读了文档之后也是如此。我的问题:

  1. 提交到底是做什么的?我的工作理解是,它将对象从堆序列化到磁盘,从而释放堆空间。这个准确吗?
  2. 刚才提交的对象的引用发生了什么?它们是否被GC清理,或者它们以某种方式“引用”磁盘上的一个对象(使用MapDB使其透明?)

最终,我想知道如何尽可能高效地使用MapDB,但如果不知道commit()的作用,我就无法做到这一点。我希望您能为有效使用MapDB提供任何其他建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-18 23:10:03

commit操作是交易记录上的一个操作,就像您在数据库系统中发现的那样。MapDB实现事务,因此commit实际上是“对这个DB所做的更改是永久的,并且对它的其他用户是可见的”。额外的操作是rollback,它丢弃了您在当前事务中所做的所有更改。提交不会(直接)影响内存中的内容和不存在的内容。如果您试图回收堆空间,则可能需要查看compact()

对于你的第二个问题,如果你持有一个对一个对象的强引用,那么你继续持有那个强引用。MapDB不会为您删除它。大多数情况下,您应该将MapDB看作是一个普通的Java。当您调用get时,无论是在内存中还是在磁盘上,MapDB都会对您隐藏,只会返回检索对象的可用引用。检索到的对象将在内存中徘徊,直到成为垃圾,就像其他任何东西一样。

票数 3
EN

Stack Overflow用户

发布于 2018-06-06 08:38:55

这是一个好主意,不要在你所做的地图上的每一个变化之后提交,而是按照某种时间表去做。

喜欢

  • 每一个N的变化
  • M
  • 在代码中出现某种逻辑检查点之后。

执行太多的提交将使您的应用程序非常慢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18322066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档