Py之lmdb:lmdb的简介、安装、使用方法之详细攻略

简介: Py之lmdb:lmdb的简介、安装、使用方法之详细攻略

lmdb的简介

image.png



       LMDB,即Lightning Memory-Mapped Database Manager 闪电内存映射数据库管理器。是一个基于btree的数据库管理库,松散地建模于BerkeleyDB API,但是进行了很多简化。整个数据库在内存映射中公开,所有数据获取都直接从映射的内存返回数据,因此在数据获取期间不会出现malloc或memcpy。因此,这个库非常简单,因为它本身不需要页面缓存层,而且它的性能和内存效率都非常高。它也是完全事务性的,具有完整的ACID语义,当内存映射为只读时,不能通过从应用程序代码中编写游离指针来破坏数据库完整性。

       该库完全支持线程感知,并支持来自多个进程和线程的并发读/写访问。数据页使用复制即写策略,因此不会覆盖任何活动的数据页,这也提供了对损坏的抵抗力,并消除了系统崩溃后任何特殊恢复过程的需要。写被完全序列化;一次只能有一个写事务是活动的,这就保证了写事务不会死锁。数据库结构是多版本的,因此读取器运行时没有锁;作家不能阻止读者,读者也不会阻止作家。

       与其他使用写前事务日志或仅追加数据写的著名数据库机制不同,LMDB在操作期间不需要维护。写前日志记录器和仅追加的数据库都需要定期检查点和/或压缩它们的日志或数据库文件,否则它们会无限制地增长。LMDB跟踪数据库中的空闲页面,并将它们用于新的写操作,因此在正常使用中,数据库大小不会无限制地增长。

       内存映射可以用作只读或读写映射。默认情况下它是只读的,因为这提供了对损坏的完全免疫力。使用读写模式提供了更高的写性能,但也增加了应用程序通过指向静默破坏数据库的指针进行写操作的可能性。当然,如果您的应用程序代码已知是无bug的(…),那么这就不是问题。


     lmdb是一款开源的高效快速的内存映射数据库,C语言编写,基于B+树索引,支持MVCC事务处理。它不是一个需要独立运行的数据库管理进程,只要在需要访问lmdb数据库的代码里引用lmdb库,给出数据库所在目录,就能方便地实现读写lmdb数据库。



LMDB主页:http://www.lmdb.tech/doc/index.html

LMDB API:http://www.lmdb.tech/doc/group__mdb.html

GitHub:https://github.com/dw/py-lmdb/



lmdb的安装


pip install lmdb

image.png





lmdb的使用方法


1、python读写LMDB文件的方法

(1)、生成一个空的lmdb数据库文件


# -*- coding: utf-8 -*-

import lmdb

 

# 如果train文件夹下没有data.mbd或lock.mdb文件,则会生成一个空的,如果有,不会覆盖

# map_size定义最大储存容量,单位是kb,以下定义1TB容量

env = lmdb.open("./train",map_size=1099511627776)

env.close()

(2)、LMDB数据的添加、修改、删除


# -*- coding: utf-8 -*-

import lmdb

 

# map_size定义最大储存容量,单位是kb,以下定义1TB容量

env = lmdb.open("./train", map_size=1099511627776)

 

txn = env.begin(write=True)

 

# 添加数据和键值

txn.put(key = '1', value = 'aaa')

txn.put(key = '2', value = 'bbb')

txn.put(key = '3', value = 'ccc')

 

# 通过键值删除数据

txn.delete(key = '1')

 

# 修改数据

txn.put(key = '3', value = 'ddd')

 

# 通过commit()函数提交更改

txn.commit()

env.close()

(3)、查询lmdb数据库内容


# -*- coding: utf-8 -*-

import lmdb

 

env = lmdb.open("./train")

 

# 参数write设置为True才可以写入

txn = env.begin(write=True)

############################################添加、修改、删除数据

 

# 添加数据和键值

txn.put(key = '1', value = 'aaa')

txn.put(key = '2', value = 'bbb')

txn.put(key = '3', value = 'ccc')

 

# 通过键值删除数据

txn.delete(key = '1')

 

# 修改数据

txn.put(key = '3', value = 'ddd')

 

# 通过commit()函数提交更改

txn.commit()

############################################查询lmdb数据

txn = env.begin()

 

# get函数通过键值查询数据

print txn.get(str(2))

 

# 通过cursor()遍历所有数据和键值

for key, value in txn.cursor():

 print (key, value)

 

############################################

 

env.close()

(4)、读取已有.mdb文件内容


# -*- coding: utf-8 -*-

import lmdb

 

env_db = lmdb.Environment('trainC')

# env_db = lmdb.open("./trainC")

 

txn = env_db.begin()

 

# get函数通过键值查询数据,如果要查询的键值没有对应数据,则输出None

print txn.get(str(200))

 

for key, value in txn.cursor(): #遍历

 print (key, value)

 

env_db.close()


 


相关文章
|
机器学习/深度学习 编解码
ICCV 2023 超分辨率(Super-Resolution)论文汇总
ICCV 2023 超分辨率(Super-Resolution)论文汇总
730 0
|
机器学习/深度学习 资源调度 监控
深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。
深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。
|
消息中间件 XML 网络协议
『NLog』.Net使用NLog使用方式及详细配置(输出至文件/RabbitMQ/远程网络Tcp)
📣读完这篇文章里你能收获到 - Nlog输出至文件/RabbitMQ/远程网络Tcp配置文档 - Nlog配置参数详解 - .NET CORE项目接入
5828 0
『NLog』.Net使用NLog使用方式及详细配置(输出至文件/RabbitMQ/远程网络Tcp)
|
机器学习/深度学习 缓存 PyTorch
异步数据加载技巧:实现 DataLoader 的最佳实践
【8月更文第29天】在深度学习中,数据加载是整个训练流程中的一个关键步骤。为了最大化硬件资源的利用率并提高训练效率,使用高效的数据加载策略变得尤为重要。本文将探讨如何通过异步加载和多线程/多进程技术来优化 DataLoader 的性能。
1864 1
|
Linux 数据安全/隐私保护 Windows
更换(Pypi)pip源到国内镜像
pip国内的一些镜像 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.
247036 2
|
11月前
|
存储 人工智能 分布式计算
Parquet 文件格式详解与实战 | AI应用开发
Parquet 是一种列式存储文件格式,专为大规模数据处理设计,广泛应用于 Hadoop 生态系统及其他大数据平台。本文介绍 Parquet 的特点和作用,并演示如何在 Python 中使用 Pandas 库生成和读取 Parquet 文件,包括环境准备、生成和读取文件的具体步骤。【10月更文挑战第13天】
1961 60
|
11月前
|
安全 Ubuntu 网络安全
docker中主机模式(host)
【10月更文挑战第4天】
740 1
|
XML 数据格式 Python
将xml标签转换为txt(voc格式转换为yolo方便进行训练)
该文章提供了一个Python脚本,用于将VOC格式的XML标签文件转换为YOLO训练所需的TXT格式,包括修改数据集类别、输入图像与标注文件夹地址、转换过程和结果展示。
将xml标签转换为txt(voc格式转换为yolo方便进行训练)
|
机器学习/深度学习 人工智能 监控
一文读懂deepSpeed:深度学习训练的并行化
DeepSpeed 是由微软开发的开源深度学习优化库,旨在提高大规模模型训练的效率和可扩展性。通过创新的并行化策略、内存优化技术(如 ZeRO)及混合精度训练,DeepSpeed 显著提升了训练速度并降低了资源需求。它支持多种并行方法,包括数据并行、模型并行和流水线并行,同时与 PyTorch 等主流框架无缝集成,提供了易用的 API 和丰富的文档支持。DeepSpeed 不仅大幅减少了内存占用,还通过自动混合精度训练提高了计算效率,降低了能耗。其开源特性促进了 AI 行业的整体进步,使得更多研究者和开发者能够利用先进优化技术,推动了 AI 在各个领域的广泛应用。
|
机器学习/深度学习 并行计算 PyTorch
ONNX 优化技巧:加速模型推理
【8月更文第27天】ONNX (Open Neural Network Exchange) 是一个开放格式,用于表示机器学习模型,使模型能够在多种框架之间进行转换。ONNX Runtime (ORT) 是一个高效的推理引擎,旨在加速模型的部署。本文将介绍如何使用 ONNX Runtime 和相关工具来优化模型的推理速度和资源消耗。
5649 4