Lightning MDB数据库管理库
LMDB 是一个超级快、超级小的 key-value 数据存储服务,是由 OpenLDAP 项目的 Symas 开发的。使用内存映射文件,因此读取的性能跟内存数据库一样。其大小受限于虚拟地址空间的大小。
LMDB是基于Btree的数据库管理库,其基于BerkeleyDB API进行了松散建模,但已大大简化。整个数据库都显示在内存映射中,并且所有数据提取都直接从映射的内存返回数据,因此在数据提取期间不会发生malloc或memcpy。这样,该库非常简单,因为它不需要自己的页面缓存层,并且具有极高的性能和内存效率。它也具有完全ACID语义的完全事务性,并且当内存映射为只读时,数据库完整性不会被应用程序代码中的杂散指针写入破坏。
该库完全支持线程,并支持来自多个进程和线程的并发读/写访问。数据页使用写时复制策略,因此不会覆盖任何活动数据页,这也可以防止损坏,并且在系统崩溃后无需任何特殊的恢复过程。写入已完全序列化;一次只能有一个写事务处于活动状态,这保证了写程序永远不会死锁。数据库结构是多版本的,因此读取器没有锁运行。作家不能阻止读者,读者也不能阻止作家。
与其他使用预写事务日志或仅追加数据写入的知名数据库机制不同,LMDB在操作期间不需要维护。预写记录器和仅附加数据库都需要定期检查点和/或压缩其日志或数据库文件,否则它们会无限制地增长。LMDB跟踪数据库中的空闲页面,并将它们重新用于新的写操作,因此数据库大小不会随正常使用而增长。
内存映射可以用作只读或读写映射。默认情况下它是只读的,因为它可以完全防止损坏。使用读写模式可提供更高的写入性能,但增加了流浪应用程序通过指针写入以静默破坏数据库的可能性。
评论