lmdb使用小结

使用lmdb可以加速数据从磁盘读取的速度,查看了很多资料,记录一下

简介

lmdb全称为Lightning Memory-Mapped Database,其拥有如下特性:

  • Ordered map interface (keys are always lexicographically sorted).
  • Reader/writer transactions: readers don’t block writers, writers don’t block readers. Each environment supports one concurrent write transaction.
  • Read transactions are extremely cheap.
  • Environments may be opened by multiple processes on the same host, making it ideal for working around Python’s GIL.
  • Multiple named databases may be created with transactions covering all named databases.
  • Memory mapped, allowing for zero copy lookup and iteration. This is optionally exposed to Python using the buffer() interface.
  • Maintenance requires no external process or background threads.
  • No application-level caching is required: LMDB fully exploits the operating system’s buffer cache.
  • 有序映射接口(键总是按字典顺序排序);
  • 读写器事务:读取器不阻止写入器,写入器不阻止读取器。每个环境支持一个并发写事务;
  • 读事务非常简单快速;
  • 环境对象可以由同一主机上的多个进程打开,非常适用于Python的GIL开发环境;
  • 事务可以创建多个命名数据库;
  • 内存映射,允许零拷贝查找和迭代。可以选择使用buffer()接口进行优化,这是Python可选的;
  • 维护不需要外部进程或后台线程;
  • 不需要应用程序级缓存:LMDB完全利用操作系统的缓冲区缓存。

基本操作

  1. 创建环境对象
  2. 创建事务对象(读取器或者写入器)
  3. 进行读取或者写入操作
  4. 关闭事务对象
  5. 关闭环境对象

对于写入器,每个环境只能创建一个,完成写入操作后额外需要进行提交操作(commit);如果再次写入,那么需要重新创建环境对象(写入器)

对于读取器,可以通过光标(cursor)进行遍历;也可以通过键进行查找

相关实现

相关阅读