我在一个项目中使用MapDB,该项目处理需要映射/排队的数十亿对象。在程序完成后,我不需要任何形式的持久性( MapDB数据库都是临时的)。我希望该程序能够尽快运行,但我对MapDB的commit()函数感到困惑(我认为它与性能相关),即使在阅读了文档之后也是如此。我的问题:
最终,我想知道如何尽可能高效地使用MapDB,但如果不知道commit()的作用,我就无法做到这一点。我希望您能为有效使用MapDB提供任何其他建议。
发布于 2014-09-18 23:10:03
commit操作是交易记录上的一个操作,就像您在数据库系统中发现的那样。MapDB实现事务,因此commit实际上是“对这个DB所做的更改是永久的,并且对它的其他用户是可见的”。额外的操作是rollback,它丢弃了您在当前事务中所做的所有更改。提交不会(直接)影响内存中的内容和不存在的内容。如果您试图回收堆空间,则可能需要查看compact()。
对于你的第二个问题,如果你持有一个对一个对象的强引用,那么你继续持有那个强引用。MapDB不会为您删除它。大多数情况下,您应该将MapDB看作是一个普通的Java。当您调用get时,无论是在内存中还是在磁盘上,MapDB都会对您隐藏,只会返回检索对象的可用引用。检索到的对象将在内存中徘徊,直到成为垃圾,就像其他任何东西一样。
发布于 2018-06-06 08:38:55
这是一个好主意,不要在你所做的地图上的每一个变化之后提交,而是按照某种时间表去做。
喜欢
N的变化M秒执行太多的提交将使您的应用程序非常慢。
https://stackoverflow.com/questions/18322066
复制相似问题