lmdb(Lightning Memory-Mapped Database)文档提到了关于返回数据有效性的以下内容:
从数据库返回的值仅在后续版本中有效 更新操作,或事务结束。不要修改或释放 他们通常指向数据库本身。
我对什么"更新操作"有点困惑。在这种情况下指的是: 做"更新操作"表示对数据库的任何更新操作(例如,更改另一个值,可能来自另一个线程),还是仅对特定值进行更新操作?
答案 0 :(得分:0)
它可能应该说“......仅在同一事务的后续更新操作或事务结束时才有效。”
如果您持有只读事务,则在您持有事务时,另一个线程无法更改该值,否则将无法保证您可以在另一个线程使该值无效之前成功复制该值。
因此,在打开事务时,该值将保持有效,但不会长时间保持只读事务处于打开状态,因为这会导致数据库在写入时不断增长(删除的空间无法重用)