繁体   English   中英

从lmdb返回的数据在对数据库进行任何更改后是否无效?

[英]is data returned from lmdb invalidated after any change to the database?

lmdb(闪电存储器映射数据库)文档在返回数据的有效性方面提到了以下内容:

从数据库返回的值仅在后续更新操作或事务结束之前才有效。 不要修改或释放它们,它们通常指向数据库本身。

在这种情况下,我对“更新操作”指的是有些困惑:“更新操作”是指对数据库的任何更新操作(例如,更改另一个值,可能来自另一个线程),还是仅针对特定的更新操作值?

它可能应该说“ ...仅在对同一事务的后续更新操作或事务结束之前才有效”。

如果您持有只读事务,则另一个线程无法在您持有事务时更改该值,因为否则将无法保证您可以在另一个线程使该值无效之前成功复制该值。

因此,该值在事务打开时将保持有效,但不要长时间保持只读事务打开,因为它将导致数据库在写入时持续增长(无法重复使用删除操作中的空间)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM