我在一个处理数十亿个需要映射/排队的对象的项目中使用MapDB。程序完成后,我不需要任何持久性(MapDB数据库都是临时的)。我希望程序尽可能快地运行,但是即使在阅读了docs之后,我也对MapDB的commit()函数(我认为与性能有关)感到困惑。我的问题:
最终,我想知道如何尽可能高效地使用MapDB,但是如果不知道commit()的用途,我将无法做到这一点。对于可能有效使用MapDB的其他建议,我将不胜感激。
最佳答案
commit
操作是对transactions的操作,就像在数据库系统中会发现的那样。 MapDB实现了事务,因此commit
实际上是“使对该数据库所做的更改永久化,并且对它的其他用户可见”。补充操作是rollback
,该操作会丢弃您在当前事务中所做的所有更改。提交不会(直接)影响内存中的内容和内存中的内容。如果您要回收堆空间,则可能要查看compact()
。
对于第二个问题,如果您持有对某个对象的强引用,那么您将继续持有该强引用。 MapDB不会为您删除它。大多数时候,您应该将MapDB视为普通的Java Map。调用get
时,MapDB会向您隐藏它是在内存中还是在磁盘上,并仅向您返回对检索到的对象的可用引用。就像其他任何东西一样,检索到的对象将一直在内存中徘徊,直到变成垃圾为止。