简单的基于文件的KV存储

kvfile的Python项目详细描述


kvfile

TravisCoveralls

一个简单的基于文件的键值存储,因此可以以较小的内存占用来容纳大型数据集。

在内部将使用更快的leveldb作为存储后端,如果leveldb不可用,则使用sqlite3作为回退。

基本知识

任何使用python的人都应该熟悉这个api。 它公开getkeysitems用于从数据库读取数据,以及set用于在数据库中设置值。

初始化

importdatetimeimportdecimalfromkvfileimportKVFilekv=KVFile()

设定值

kv.set('s','value')kv.set('i',123)kv.set('d',datetime.datetime.fromtimestamp(12325))kv.set('n',decimal.Decimal('1234.56'))kv.set('ss',set(range(10)))kv.set('o',dict(d=decimal.Decimal('1234.58'),n=datetime.datetime.fromtimestamp(12325)))

获取值

assertkv.get('s')=='value'assertkv.get('i')==123assertkv.get('d')==datetime.datetime.fromtimestamp(12325)assertkv.get('n')==decimal.Decimal('1234.56')assertkv.get('ss')==set(range(10))assertkv.get('o')==dict(d=decimal.Decimal('1234.58'),n=datetime.datetime.fromtimestamp(12325))

列出值

keys()items()方法返回一个生成器,生成有效流处理的值。

返回的数据按键升序(默认)排序

assertlist(kv.keys())==['d','i','n','o','s','ss']assertlist(kv.items())==[('d',datetime.datetime.fromtimestamp(12325)),('i',123),('n',decimal.Decimal('1234.56')),('o',{'d':decimal.Decimal('1234.58'),'n':datetime.datetime.fromtimestamp(12325)}),('s','value'),('ss',{0,1,2,3,4,5,6,7,8,9})]

对于要按降序排序的keys()items()方法,将reverse参数设置为true。

批量插入数据

当批量插入数据时,sqlite db后端可能非常慢。可以使用insert方法高效地进行批量插入。

kv.insert(((str(i),':{}'.format(i))foriinrange(50000)))

批处理大小默认为1000,您应该根据数据大小和可用内存对其进行修改。

kv.insert(((str(i),':{}'.format(i))foriinrange(50000)),batch_size=40000)

如果要从生成器插入数据并需要使用插入的数据,请使用insert_generator方法:

forkey,valueinkv.insert_generator(((str(i),':{}'.format(i))foriinrange(50)),batch_size=10):print(key,value)

安装leveldb

在基于debian的linux上:

$ apt-get install libleveldb-dev libleveldb1

在基于Alpine的Linux上:

$ apk --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --update add leveldb leveldb-dev

在OS X上:

$ brew install leveldb

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从SVG中提取层   java通过蓝牙将文件从手机传输到其他手机   java如何使网络化JavaFX应用程序正确退出?   java Android Open GL不绘制正方形   java为什么使用泛型得到编译器警告?   多集群的Java Hazelcast问题   java OpenCV库配置正确,安卓应用程序可以正常运行一段时间,直到出现错误,表明不再加载该库   java字节好友通知中断Eclipse调试器   java JavaMail不会从发件人(Google除外)检索邮件   java使用MOXy将JsonObject属性映射到XML   java在FilteredTree中搜索“隐藏数据”   Javafx:用鼠标在ImageView上绘图   垃圾收集如何确定Java应用程序年轻gc的原因   java如何维护每个请求打开的Hibernate会话?   java gzip输入文件中的hadoop mapreduce   Java新手:Swing和显示ASCII文件   java RxJava异步订阅   java向editText添加搜索功能   java JavaFX TableViewTextField绑定