LMDB(Lighting Memory-Mapped Database Manager)闪电内存映射数据管理器,是一个基于btree的数据库管理库,整个数据库在内存映射中公开,所有数据获取都直接从映射的内存返回数据,因此在数据获取期间不会出现malloc或memcpy。它本身不需要页面缓存层,而且它的性能和内存效率都非常高。它也是完全事务性的,具有完整的ACID语义,当内存映射为只读时,不能通过从应用程序代码中编写游离指针来破坏数据库完整性。
该库完全支持线程感知,并支持来自多个进程和线程的并发读、写访问。数据页使用复制即写策略,因此不会覆盖任何活动的数据页,这也提供了对损坏的抵抗力,并消除了系统崩溃后任何特殊恢复过程的需要。写被完全序列化,一次只能有一个写事务是活动的,这就保证了写事务不会死锁。数据库结构是多版本的,因此读取器运行时没有锁;因此读取器运行时没有锁,作家不能阻止读者,读者也不会阻止作家。
与其他使用写前事务日志或仅追加数据写的著名数据库机制不同,LMDB在操作期间不需要维护。写前日志记录器和仅追加的数据库都需要定期检查点和或压缩他们的日志或数据库文件,否则他们会无限制的增长。LMDB跟踪数据库中的空闲页面,并将他们用于新的写操作,因此在正常使用中,数据库大小不会无限制的增长。
内存映射可以用作只读或读写映射。默认情况下它是只读的,因为这提供了对损坏的完全免疫力。使用读写模式提供了更高的写性能,但也增加了应用程序通过指向静默破坏数据库的指针进行写操作的可能性。
LMDB是一款开源的高效快速的内存映射数据库,C语言编写,基于B+树索引,支持MVCC事务处理。它不是一个需要独立运行的数据库管理进程,只要在需要访问LMDB数据库的代码里引用LMDB库,给出数据库所在目录,就能方便的实现读写LMDB数据库。
安装
pip3 install lmdb --user