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

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

lmdb(闪电内存映射数据库)文档提到了以下关于返回数据有效性的内容:

Values returned from the database are valid only until a subsequent update operation, or the end of the transaction. Do not modify or free them, they commonly point into the database itself.

我对 "update operation" 在这种情况下指的是什么感到有点困惑: "update operation" 是指对数据库的任何更新操作(例如更改另一个值,可能来自另一个线程),还是仅对特定值的更新操作?

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

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

因此该值将在事务打开时保持有效,但不要让只读事务长时间打开,因为它会导致数据库在写入时不断增长(space 从删除不能重复使用)。