lmdb 是Lightning Memory-Mapped Database, 一款内存映射型数据库,使用内存映射文件提供更好的输入输出性能,python读写lmdb非常方便,在一些小项目里使用lmdb可以高效存储和读取大量数据却不需要安装什么数据库。
内存映射(mmap)是一种内存映射文件的方法,原理上是将一个文件映射到进程的地址空间,这样文件磁盘地址和应用程序进程虚拟地址建立起一个映射关系。形成映射关系后,进程就可以采用指针的形式读写这一段内存,而系统则会自动将内存的数据回写到对应的文件磁盘上。
安装方式
pip install lmdb
import lmdb
env = lmdb.open("./students") # 打开数据库
txn = env.begin(write=True) # 开启事务
txn.put(str(1).encode(), "xiaoming".encode()) # put 可以写入数据,也可以修改数据
txn.put(str(2).encode(), "xiaogang".encode())
txn.put(str(3).encode(), "xiaohong".encode())
txn.commit() # 提交更改
env.close()
写入数据时,key和 value都必须是bytes类型, open数据时可以通过map_size参数设置创建的新数据库所需磁盘空间的最小值, 默认值是10485760,单位是字节。
import lmdb
env = lmdb.open("./students") # 打开数据库
txn = env.begin() # 开启事物
print(txn.get("1".encode())) # 查询一个key的值
for key, value in txn.cursor(): # 通过cursor()遍历所有数据和键值
print(key, value)
env.close()
import lmdb
env = lmdb.open("./students") # 打开数据库
txn = env.begin(write=True) # 开启事物
txn.delete("1".encode()) # 删除key 1
for key, value in txn.cursor(): # 通过cursor()遍历所有数据和键值
print(key, value)
env.close()
如果需要对数据进行修改,必须在begin方法里设置write参数为True。
神经网络大型数据集ImageNet 就是存储在lmdb数据中,如果你有大量的key-value形式的数据需要存储且不需要远程访问,那么lmdb就非常合适。
图片,文件,如果量很大,也可以使用lmdb来存储,所有数据都放在一个文件中避免了文件系统寻址的开销。
QQ交流群: 211426309