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()


 


相关文章
|
机器学习/深度学习 数据可视化 PyTorch
【PyTorch】TensorBoard基本使用
【PyTorch】TensorBoard基本使用
1553 0
|
机器学习/深度学习 数据可视化 TensorFlow
TensorFlow的可视化工具:TensorBoard的使用
【4月更文挑战第17天】TensorBoard是TensorFlow的官方可视化工具,用于展示和分析模型训练过程、结构和数据。它包括标量、图像、音频、模型图和直方图等多种可视化功能。通过`tf.summary`记录数据,使用`tensorboard --logdir`启动。高级功能包括自定义仪表板、嵌入和插件,助力深度学习的调试与优化。
1421 0
|
数据挖掘 数据库
睡眠健康数据分析(上)
睡眠健康数据分析
1294 0
|
存储 NoSQL 区块链
开源:LMDB 操作工具:lmcmd
本文介绍了 LMDB(一种高效的键值存储数据库)和基于 Python 开发的命令行工具 `lmcmd`。由于 LMDB 使用二进制文件存储,管理和调试不便,因此开发了 `lmcmd`,提供了类似 Redis 的命令行操作界面,支持数据库操作、数据导入导出和查找等功能。文章涵盖了 `lmcmd` 的安装、连接数据库和常用命令(如 `set`、`get`、`export` 等)示例。最后强调了开源工具的价值,鼓励用户反馈和改进。
767 1
|
6月前
|
缓存 网络协议 API
如何查询IPv6地址的归属信息?命令行、在线工具、API接口全解析
本文详解IPv6地址查询的四大实用方案(命令行、在线控制台、API接口、本地离线库),剖析其精度、速度与适用场景,并提供选型建议及CDN调度、安全防护、地域分析等实战案例,助力高效精准获取IPv6归属信息。(239字)
1311 7
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
2753 1
|
JavaScript 关系型数据库 数据库
探索Wiki:开源知识管理平台及其私有化部署
在信息时代,知识管理至关重要。本文介绍一款GitHub上的开源工具——Wiki,基于Node.js和Vue.js开发,旨在提供高效的知识管理解决方案。它具备简洁界面、权限管理、多语言支持及高度可定制等特点,适合团队协作。通过Docker-compose私有化部署,用户可轻松搭建专属知识库,保障数据安全。访问[GitHub](https://github.com/requarks/wiki)获取更多信息。
1531 7
|
机器学习/深度学习 自然语言处理 PyTorch
【chatgpt问答记录】前馈神经网络
【chatgpt问答记录】前馈神经网络
413 1
|
机器学习/深度学习 测试技术 计算机视觉
【YOLOv8改进】DAT(Deformable Attention):可变性注意力 (论文笔记+引入代码)
YOLO目标检测创新改进与实战案例专栏探讨了YOLO的有效改进,包括卷积、主干、注意力和检测头等机制的创新,以及目标检测分割项目的实践。专栏介绍了Deformable Attention Transformer,它解决了Transformer全局感受野带来的问题,通过数据依赖的位置选择、灵活的偏移学习和全局键共享,聚焦相关区域并捕获更多特征。模型在多个基准测试中表现优秀,代码可在GitHub获取。此外,文章还展示了如何在YOLOv8中应用Deformable Attention。
|
算法 Python
Aho-Corasick 算法 AC自动机实现
Aho-Corasick 算法 AC自动机实现
1413 0

热门文章

最新文章