Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
lmdb(Lightning Memory-Mapped Database)文档在返回数据的有效性方面提到了以下内容:
从数据库返回的值仅在后续更新操作或事务结束之前有效。不要修改或释放它们,它们通常指向数据库本身。
在这种情况下,我对“更新操作”指的是什么感到有些困惑:“更新操作”是指对数据库的任何更新操作(例如更改另一个值,可能来自另一个线程),还是仅对特定的更新操作价值?
它可能应该说“......仅在同一事务的后续更新操作或事务结束之前有效。”
如果您持有一个只读事务,则另一个线程在您持有该事务时无法更改该值,因为否则无法保证您可以在另一个线程使该值无效之前成功复制该值。
因此,在打开事务时该值将保持有效,但不要长时间保持只读事务打开,因为它会导致数据库在写入时不断增长(无法重用来自删除的空间)。