对数据库进行任何更改后,从 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 从删除不能重复使用)。
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 从删除不能重复使用)。