基于文件的简单KV存储
项目描述
kvfile
这是一个基于文件的简单键值存储,可以容纳大量数据集,同时占用较小的内存空间。
内部将使用较快的leveldb
作为存储后端,如果不可用则回退使用sqlite3
。
基础
API应该对任何使用Python的人都很熟悉。它公开了从数据库读取的get
、keys
和items
,以及设置数据库中值的set
。
初始化
import datetime
import decimal
from kvfile import KVFile
kv = 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)))
获取值
assert kv.get('s') == 'value'
assert kv.get('i') == 123
assert kv.get('d') == datetime.datetime.fromtimestamp(12325)
assert kv.get('n') == decimal.Decimal('1234.56')
assert kv.get('ss') == set(range(10))
assert kv.get('o') == dict(d=decimal.Decimal('1234.58'),
n=datetime.datetime.fromtimestamp(12325))
列出值
keys()
和items()
方法返回一个生成器,高效地生成值以进行流处理。
返回的数据根据键(默认情况下)升序排序
assert list(kv.keys()) == ['d', 'i', 'n', 'o', 's', 'ss']
assert list(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})
]
将reverse
参数设置为True,以使keys()
和items()
方法按降序排序。
批量插入数据
当批量插入数据时,SQLite数据库后端可能非常慢。您可以使用插入方法高效地批量插入。
kv.insert(((str(i), ':{}'.format(i)) for i in range(50000)))
默认批处理大小为1000,您应根据数据大小和可用内存进行修改。
kv.insert(((str(i), ':{}'.format(i)) for i in range(50000)), batch_size=40000)
如果您需要从生成器中插入数据并使用插入的数据,请使用insert_generator
方法
for key, value in kv.insert_generator(((str(i), ':{}'.format(i)) for i in range(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
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
kvfile-1.1.2.tar.gz (11.7 kB 查看哈希值)
构建分发
kvfile-1.1.2-py2.py3-none-any.whl (9.4 kB 查看哈希值)