其实经常有本地存储一些信息数据的需求
一般都是通过各种配置文件比如什么 ini ,json ,toml ,yaml 等等东西
但配置文件必须完整存储, 并不适合存储大量信息
一般真存多点信息都用 sqlite 了
我想如果有一个类似 redis 的接口, 可能不需要那么复杂
但能做到键值存储, 随机访问, 性能还行的本地文件实现的库,那是很好的啊
具体要求如下

支持随机 key ,value 存储访问
没有任何安装
只是用单文件存储内容, 方便复制备份等
性能类似那种本地数据库比如 sqlite , 当然快点更好

pickle 不能满足要求吗

用 sqlite 自己封装一层就可以了吧

用 pickle zlib 序列化和反序列化, 可以直接存到 sqlite 里面, 不过好奇为什么不用 redis, 已经够简单了?

sqlite 它不香嘛?

经常有本地存储的需要啊比如我想开发一个桌面软件, 需要存数据再本地, 但是不想用 sqlkv 存储可能足够满足需求, 而且更简单奇怪的事, 居然这么久没人开发这种库吗

diskcache

PickleDB, TinyDB, ZODB

sqlite 足够简单了,没必要追求最简单的实现。

我除了存 binary 数据之外的什么 kv 数据到磁盘都是直接 json.dump 就完事了,至今没遇到过性能瓶颈。。。binary 很大的时候会单独存文件里再用 kv 索引路径。之前我有一个工控桌面程序项目自动生成的配置很多,加起来大概有一百多万条 kv 对,存盘的时候 json.dump 到磁盘每次也就半秒钟,几乎全是写磁盘时间,load 也是秒读。如果是性能压力大到要高速缓存的话,应该没有比 redis 更简单的实现了。

docs.python.org/3/library/dbm.html

好像不错, 是本地文件实现的 kv, 回头仔细研究下

需要完整存取用 json.dump 是没问题的但我想要随机存取单个的值, 不想每次都完整 dump,load这也是很正常的需求至于 redis, 我如果开发一个单机软件, 我也不能指望客户端用户自己部署一个 redis 把, 就算可以弄个自动安装的, 也没必要

很多人说 sqlite我认为 sqlite 是很好, 不用安装, 单文件存储, 性能过得去但是, 我不喜欢 sql我认为正常情况下, 用名字-值这样的方式存储数据是最自然的, 本来数据在程序中就是有名字的, 直接用名字存储最自然, 就算是大量数据, 正常情况下也是有自然 key 的, 比如用户的 email,或者手机号, 都可以用来唯一索引, 都可以天然对应 kv 存储

可以看看 diskcache ,不过也是封装了一层 sqlite 。

#12 一个单表简单封装一下就出来了,何来不喜欢 sql 捏…

pypi.org/project/sqlitedict/

sqlite 你建一个表,key- value 不完了

可以弄个 class ,然后__getattr__, __setattr__,__dict__,把 sql 的增删改查写进去,反正位置也固定、sql 语句也固定,无非就是 select 和 insert or replace ,写死了,外部就根本不用理会实例化这个 class ,直接 obj.abc+obj.cba 就是了我封装了一大堆函数,然后 ipython 启动时自动 import ,现在 ipython 几乎都可以当 shell 用了

考虑下 leveldb pypi.org/project/plyvel/

dbm 啊,B+tree ,性能吊打 sqlite 的。

LZ 你看看 说的这个吧。