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


 


相关文章
|
人工智能
【AI绘画】ControlNet 之 Reference only 锁定面部跑图
【AI绘画】ControlNet 之 Reference only 锁定面部跑图
966 0
|
机器学习/深度学习 数据采集 人工智能
|
4月前
|
存储 人工智能 分布式计算
Parquet 文件格式详解与实战 | AI应用开发
Parquet 是一种列式存储文件格式,专为大规模数据处理设计,广泛应用于 Hadoop 生态系统及其他大数据平台。本文介绍 Parquet 的特点和作用,并演示如何在 Python 中使用 Pandas 库生成和读取 Parquet 文件,包括环境准备、生成和读取文件的具体步骤。【10月更文挑战第13天】
760 60
|
7月前
|
Linux 应用服务中间件 nginx
Linux 快速搭建 Overleaf 5.0 附中文字体及完整 TexLive 安装教程(2024最新版)
2024最新版 Linux 极速安装 Overleaf 5.0 手把手教学!附 XeLatex 修复,新增中文字体以及安装完整版 TexLive 教程!
|
9月前
|
人工智能 自然语言处理 测试技术
多模态大模型有了统一分割框架,华科PSALM多任务登顶,模型代码全开源
【4月更文挑战第24天】华中科技大学团队推出PSALM模型,革新多模态图像分割,实现语义、实例及交互式分割任务统一处理,提升效率。模型在多项基准测试中表现优异,支持零样本学习,适用于开放词汇分割等任务。代码开源促进研究,但面临复杂场景处理和计算资源优化的挑战。[链接](https://arxiv.org/abs/2403.14598)
274 2
|
9月前
|
机器学习/深度学习 数据可视化 算法
【Python机器学习专栏】t-SNE算法在数据可视化中的应用
【4月更文挑战第30天】t-SNE算法是用于高维数据可视化的非线性降维技术,通过最小化Kullback-Leibler散度在低维空间保持数据点间关系。其特点包括:高维到二维/三维映射、保留局部结构、无需预定义簇数量,但计算成本高。Python中可使用`scikit-learn`的`TSNE`类实现,结合`matplotlib`进行可视化。尽管计算昂贵,t-SNE在揭示复杂数据集结构上极具价值。
585 1
|
9月前
|
计算机视觉
cv2.putText
cv2.putText
519 1
|
9月前
|
SQL 数据可视化 数据库
Python中表格插件Tabulate的用法
Python中表格插件Tabulate的用法
458 0
|
存储 安全 物联网
Web3技术入门向科普
Web3是指下一代互联网,它基于区块链技术,将各种在线活动更加安全、透明和去中心化。Web3是一个广义的概念,它包括了很多方面,如数字货币、去中心化应用、智能合约等等。在这篇文章中,我们将重点讨论Web3的入门知识,帮助大家更好地了解这个领域。
1172 0

热门文章

最新文章

相关实验场景

更多