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


 


相关文章
|
10月前
|
存储 NoSQL 区块链
开源:LMDB 操作工具:lmcmd
本文介绍了 LMDB(一种高效的键值存储数据库)和基于 Python 开发的命令行工具 `lmcmd`。由于 LMDB 使用二进制文件存储,管理和调试不便,因此开发了 `lmcmd`,提供了类似 Redis 的命令行操作界面,支持数据库操作、数据导入导出和查找等功能。文章涵盖了 `lmcmd` 的安装、连接数据库和常用命令(如 `set`、`get`、`export` 等)示例。最后强调了开源工具的价值,鼓励用户反馈和改进。
533 1
|
机器学习/深度学习 Python
配置环境miniconda+pycharm【机器学习】
配置环境miniconda+pycharm【机器学习】
3258 0
|
1月前
|
缓存 网络协议 API
如何查询IPv6地址的归属信息?命令行、在线工具、API接口全解析
本文详解IPv6地址查询的四大实用方案(命令行、在线控制台、API接口、本地离线库),剖析其精度、速度与适用场景,并提供选型建议及CDN调度、安全防护、地域分析等实战案例,助力高效精准获取IPv6归属信息。(239字)
627 7
|
机器学习/深度学习 资源调度 监控
深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。
深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。
|
7月前
|
传感器 运维 安全
《智慧园区物联深耕:零信任全维度解析》
本文聚焦智慧园区物联网安全痛点,结合实际项目实践,阐述零信任架构的定制化落地路径。智慧园区物联网设备存在身份管理缺失、权限分配粗放、数据传输与存储漏洞等核心问题,传统防护难以适配设备多样、场景复杂的特性。文章提出“轻量化认证-动态权限-全链路加密”方案,通过差异化身份治理、三维权限重构、端到端加密筑牢安全基础,搭配“场景基线+行为异常”威胁检测体系及硬件旁路认证、协议适配等兼容性优化方案,解决老旧设备改造、误报率控制等实操难题。
380 0
|
数据可视化 Python
Plotly:绘制蜡烛图
Plotly:绘制蜡烛图
408 0
|
C++ 容器
【C++】STL之空间配置器(了解)
【C++】STL之空间配置器(了解)
|
存储 监控 Linux
在 CentOS 7 中进行磁盘分区和挂载的具体操作步骤,如何使用 `fdisk` 创建分区、格式化分区、创建挂载点以及临时和永久挂载分区的方法。
本文介绍了在 CentOS 7 中进行磁盘分区和挂载的具体操作步骤。通过一个实际案例,详细说明了如何使用 `fdisk` 创建分区、格式化分区、创建挂载点以及临时和永久挂载分区的方法。此外,还分享了一些实践经验,帮助读者更好地管理和优化服务器磁盘空间。
2608 4
|
缓存 安全 Linux
本地YUM源大揭秘:搭建您自己的Linux软件宝库,从此告别网络依赖!一文掌握服务器自给自足的终极技能!
【8月更文挑战第13天】在Linux中,YUM是一款强大的软件包管理工具,可自动处理依赖关系。为适应离线或特定安全需求,本指南教你搭建本地YUM源。首先创建存放软件包的`localrepo`目录,复制`.rpm`文件至其中。接着,安装并运用`createrepo`生成仓库元数据。随后配置新的`.repo`文件指向该目录,并禁用GPG检查。最后,清理并重建YUM缓存,即可启用本地YUM源进行软件搜索与安装,适用于网络受限环境。
1590 3
|
Python
python实现:旋转矩阵转换为四元数
python实现:旋转矩阵转换为四元数
681 0

热门文章

最新文章