持久性键值容器库,与Python dict兼容
项目描述
🗿Stones
持久键值存储的基础库,100%与Python dict兼容。
本项目背后的理念是拥有一个用于众多持久键值存储的通用接口,易于使用和扩展,并附带一些额外的内置功能。灵感来自 Datastore 和 MemDown。
它与对象查询库(如:JMESPath)、JSONPath RW 或 ObjectPath)配合良好。
功能和限制
- 与您已从 Python dict 熟悉的相同API
- 线程安全更新
- 出色的测试覆盖率(>90%)
- 第一个限制:键只能是字节。为了兼容性,它们从str转换为bytes。
- 第二个限制:值实际上也是bytes,但序列化器(默认为Pickle)将数据结构转换为bytes
- 有几种序列化器可用:Pickle、JSON和可选的:cbor2、msgpack。您可以轻松添加自己的序列化器,请参阅下面的文档。
- 第三项限制:数据序列化后,您必须继续使用相同的序列化器。如果出于某种原因,您想更换序列化器,您可以创建一个新的Store,使用您的新序列化器,并从旧Store复制所有数据。
- Memory Store和LMDB默认可用。其他键值存储(DBM、LevelDB、Redis)曾经实现过,但现在已经不再包含在内。
安装
本项目使用Python 3.10+或pip。
$ pip install stones
用法
from stones import stone, LmdbStore
# Create a new persistent dictionary, backed by LMDB
stor = stone('my-db', LmdbStore, serialize='pickle')
# You can use it just like a normal Python dict,
# with the limitation that keys are bytes,
# and the values must be serializable
stor[b's'] = b'whatever'
stor[b'li'] = [True, False, None, -1]
stor[b'tu'] = ('Yes', 'No', 3)
b's' in stor
# True
len(stor)
# 3
stor.keys()
# [b'li', b's', b'tu']
stor.values()
# [[True, False, None, -1], b'whatever', ('Yes', 'No', 3)]
# The data is decoded in place
-1 in stor[b'li']
# True
3 in stor[b'tu']
# True
del stor[b'li']
stor.get(b'li', False)
# False
# The data is persisted
del stor
# Re-create the store, using the same encoder
stor = stone('my-db', LmdbStore, serialize='pickle')
len(stor)
# 2
stor.keys()
# [b's', b'tu']
或多或少类似的项目
Python
- TinyDB - 精美轻量级面向文档的数据库
- RocksDict - 支持任何Python对象的键值存储
- uCache - Python的轻量级缓存库
- RaRe-Technologies/sqlitedict - 由sqlite3和pickle支持的持久化字典,多线程安全
- Lukedeo/Cupboard - 将数据存储在各种NoSQL键值存储中
- ShuhaoWu/Kvkit - 自2014年起不再维护
- Datastore - 自2014年起不再维护
- ActiveState持久化字典配方 - 从2009年
Node.js
- lowDB - 简单易用的本地JSON数据库。由纯JS提供支持。
- Keyv - 通过存储适配器支持多个后端键值存储。支持基于TTL的过期,适合作为缓存或持久化键值存储。
- MemDown - Node.js和浏览器的抽象LevelDown存储
- AppStorage - Node.js的LocalStorage,自动将对象与JSON文件同步
- NeDB - Node.js、nw.js、Electron和浏览器的嵌入式数据库
- FortuneJS - 具有通用接口的数据库抽象层
- PouchDB - 袖珍数据库
- ToiletDB - 将对象冲刷到JSON文件
- whatDB - 用于Small Web应用程序的内存JavaScript数据库,持久化到JSON文件
其他
- CubDB - 使用Elixir语言编写的嵌入式键值数据库。它本地运行,无模式,由单个文件支持。
许可证
MIT © Cristi Constantin。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码发行版
stones-0.3.0.tar.gz (13.5 kB 查看哈希)
构建发行版
stones-0.3.0-py3-none-any.whl (10.8 kB 查看哈希)