数据库环境的结构:
一个环境可能包含多个数据库,所有数据库都驻留在同一个共享内存映射和底层磁盘文件中。
在同一个进程中同时打开同一个 LMDB 文件是一个严重的错误。 不注意这一点可能会导致数据损坏和解释器崩溃。
-
path:
存储数据库的目录位置(如果subdir=True
)或文件前缀。 -
map_size
最大的数据库可能会增长的大小。用于调整内存映射的大小。如果数据库增长大于“map_size”,将引发异常,用户必须关闭并重新打开环境。在 64 位上,这样做不会受到惩罚(比如 1TB)。 在 32 位上必须小于 2GB。 -
subdir
如果为“True”,则“path”指的是存储数据和锁定文件的子目录,否则指的是文件名前缀。 -
readonly
如果为“真”,则禁止任何写操作。 注意锁定文件仍然被修改。 如果指定,则忽略 :py:meth:begin
或 :py:class:Transaction
的write
标志。 -
readahead
如果为“False”,LMDB 将禁用 OS 文件系统预读机制,这可能会在数据库大于 RAM 时提高随机读取性能。 -
meminit
如果False
LMDB 不会在将缓冲区写入磁盘之前对其进行零初始化。 这提高了性能,但可能会导致将旧堆数据写入保存在缓冲区的未使用部分中。 如果您的应用程序在内存中操作机密数据(例如明文密码),请不要使用此选项。 此选项仅在writemap=False
时才有意义; 新页面总是零初始化
writemap=True
。 -
max_readers
同时读取事务的最大数量。 只能由打开环境的第一个进程设置,因为它会影响锁定文件和共享内存区域的大小。 尝试同时启动多个 read 事务将失败。 -
locker
如果False
,不要做任何锁定。 如果预期并发访问,调用者必须自己管理所有并发。 为了正确操作,调用者必须强制执行单一写入者语义,并且必须确保在写入者处于活动状态时没有读取者正在使用旧事务。 最简单的方法是使用排他锁,这样当写入器开始时,根本没有读取器处于活动状态。
起因是复现时看到了这段代码,想知道每个变量都代表什么意思,以及lmdb.open返回的值是什么
最后,附上我觉得目前找到的关于lmdb讲的最好的文章连接:
https://www.cnblogs.com/zhangxianrong/p/14919706.html