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使用multiprocessing模块实现带回调函数的异步调用方法
Apr 18 Python
python打开文件并获取文件相关属性的方法
Apr 23 Python
Python中property属性实例解析
Feb 10 Python
对Python3 序列解包详解
Feb 16 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
Python字符串中添加、插入特定字符的方法
Sep 10 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
Python猫眼电影最近上映的电影票房信息
Sep 18 Python
彻底解决Python包下载慢问题
Nov 15 Python
用Python爬虫破解滑动验证码的案例解析
May 06 Python
pytorch 如何使用amp进行混合精度训练
May 24 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
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
Laravel实现表单提交
2017/05/07 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
nodejs入门教程六:express模块用法示例
2017/04/24 NodeJs
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
React路由管理之React Router总结
2018/05/10 Javascript
MVVM 双向绑定的实现代码
2018/06/21 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
python3实现飞机大战
2020/11/29 Python
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
应届本科生推荐信范文
2013/12/25 职场文书
研修心得体会
2014/09/04 职场文书
工程部部长岗位职责
2015/02/12 职场文书
诉讼和解协议书
2016/03/23 职场文书
浅析Python中的随机采样和概率分布
2021/12/06 Python