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 paramiko实现ssh远程访问的方法
Dec 03 Python
Python实现的弹球小游戏示例
Aug 01 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
python OpenCV学习笔记实现二维直方图
Feb 08 Python
python merge、concat合并数据集的实例讲解
Apr 12 Python
无法使用pip命令安装python第三方库的原因及解决方法
Jun 12 Python
使用11行Python代码盗取了室友的U盘内容
Oct 23 Python
解决Django中调用keras的模型出现的问题
Aug 07 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
python多环境切换及pyenv使用过程详解
Sep 27 Python
Python单元测试与测试用例简析
Nov 09 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
程序员编程十条戒律
2009/07/09 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
Python中的zip函数使用示例
2015/01/29 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
用python制作个视频下载器
2021/02/01 Python
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
机械设计制造专业个人求职信
2013/09/25 职场文书
团队队名口号大全
2014/06/06 职场文书
元旦晚会活动总结
2014/07/09 职场文书
贷款担保书
2015/01/20 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
2015入党个人自传范文
2015/06/26 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
Redis批量生成数据的实现
2022/06/05 Redis