python读写LMDB文件的方法


Posted in Python onJuly 02, 2018

LMDB的全称是Lightning Memory-Mapped Database(快如闪电的内存映射数据库),它的文件结构简单,包含一个数据文件和一个锁文件:

python读写LMDB文件的方法

LMDB文件可以同时由多个进程打开,具有极高的数据存取速度,访问简单,不需要运行单独的数据库管理进程,只要在访问数据的代码里引用LMDB库,访问时给文件路径即可。

让系统访问大量小文件的开销很大,而LMDB使用内存映射的方式访问文件,使得文件内寻址的开销非常小,使用指针运算就能实现。数据库单文件还能减少数据集复制/传输过程的开销。

在python中使用lmdb: linux中,可以使用指令‘pip install lmdb' 安装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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 Python
python中abs&map&reduce简介
Feb 20 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
Django实现分页显示效果
Oct 31 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
pytorch下使用LSTM神经网络写诗实例
Jan 14 Python
Python读取文件内容为字符串的方法(多种方法详解)
Mar 04 Python
python获取命令行参数实例方法讲解
Nov 02 Python
关于python中remove的一些坑小结
Jan 04 Python
对numpy中的数组条件筛选功能详解
Jul 02 #Python
python matlibplot绘制多条曲线图
Feb 19 #Python
python matlibplot绘制3D图形
Jul 02 #Python
对numpy Array [: ,] 的取值方法详解
Jul 02 #Python
Python使用itertools模块实现排列组合功能示例
Jul 02 #Python
python绘制立方体的方法
Jul 02 #Python
python numpy 一维数组转变为多维数组的实例
Jul 02 #Python
You might like
PHP判断表单复选框选中状态完整例子
2014/06/24 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
js中通过split函数分割字符串成数组小例子
2013/09/21 Javascript
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
基于python检查矩阵计算结果
2020/05/21 Python
Python多线程的退出控制实现
2020/08/10 Python
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
.NET remoting的两种通道是什么
2016/05/31 面试题
大三在校生电子商务求职信
2013/10/29 职场文书
班风学风建设方案
2014/05/06 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
用JS写一个发布订阅模式
2021/11/07 Javascript
springboot中的pom文件 project报错问题
2022/01/18 Java/Android