Python 有没有好用的本地文件实现的 key, value 存储

219 天前
 iorilu

其实经常有本地存储一些信息数据的需求

一般都是通过各种配置文件比如什么 ini ,json ,toml ,yaml 等等东西

但配置文件必须完整存储, 并不适合存储大量信息

一般真存多点信息都用 sqlite 了

我想如果有一个类似 redis 的接口, 可能不需要那么复杂

但能做到键值存储, 随机访问, 性能还行的本地文件实现的库,那是很好的啊

具体要求如下

  1. 支持随机 key ,value 存储访问
  2. 没有任何安装
  3. 只是用单文件存储内容, 方便复制备份等
  4. 性能类似那种本地数据库比如 sqlite , 当然快点更好
3692 次点击
所在节点    Python
34 条回复
Tanix2
219 天前
pickle 不能满足要求吗
vance123
219 天前
用 sqlite 自己封装一层就可以了吧
shinession
219 天前
用 pickle zlib 序列化和反序列化, 可以直接存到 sqlite 里面, 不过好奇为什么不用 redis, 已经够简单了?
buliugu
219 天前
sqlite 它不香嘛?
iorilu
219 天前
@shinession 经常有本地存储的需要啊

比如我想开发一个桌面软件, 需要存数据再本地, 但是不想用 sql
kv 存储可能足够满足需求, 而且更简单
奇怪的事, 居然这么久没人开发这种库吗
aploium
219 天前
diskcache
cmdOptionKana
219 天前
PickleDB, TinyDB, ZODB
swulling
219 天前
sqlite 足够简单了,没必要追求最简单的实现。
Kirscheis
219 天前
我除了存 binary 数据之外的什么 kv 数据到磁盘都是直接 json.dump 就完事了,至今没遇到过性能瓶颈。。。binary 很大的时候会单独存文件里再用 kv 索引路径。
之前我有一个工控桌面程序项目自动生成的配置很多,加起来大概有一百多万条 kv 对,存盘的时候 json.dump 到磁盘每次也就半秒钟,几乎全是写磁盘时间,load 也是秒读。
如果是性能压力大到要高速缓存的话,应该没有比 redis 更简单的实现了。
aijam
219 天前
iorilu
219 天前
@aploium 好像不错, 是本地文件实现的 kv, 回头仔细研究下
iorilu
219 天前
@Kirscheis 需要完整存取用 json.dump 是没问题的

但我想要随机存取单个的值, 不想每次都完整 dump,load

这也是很正常的需求

至于 redis, 我如果开发一个单机软件, 我也不能指望客户端用户自己部署一个 redis 把, 就算可以弄个自动安装的, 也没必要
iorilu
219 天前
很多人说 sqlite

我认为 sqlite 是很好, 不用安装, 单文件存储, 性能过得去

但是, 我不喜欢 sql

我认为正常情况下, 用名字-值这样的方式存储数据是最自然的, 本来数据在程序中就是有名字的, 直接用名字存储最自然, 就算是大量数据, 正常情况下也是有自然 key 的, 比如用户的 email,或者手机号, 都可以用来唯一索引, 都可以天然对应 kv 存储
tomczhen
219 天前
可以看看 diskcache ,不过也是封装了一层 sqlite 。
chendy
219 天前
@iorilu #12 一个单表简单封装一下就出来了,何来不喜欢 sql 捏…
wateryessence
219 天前
swulling
219 天前
@iorilu sqlite 你建一个表,key- value 不完了
NoOneNoBody
219 天前
可以弄个 class ,然后__getattr__, __setattr__,__dict__,把 sql 的增删改查写进去,反正位置也固定、sql 语句也固定,无非就是 select 和 insert or replace ,写死了,外部就根本不用理会

实例化这个 class ,直接 obj.abc+obj.cba 就是了

我封装了一大堆函数,然后 ipython 启动时自动 import ,现在 ipython 几乎都可以当 shell 用了
icbmicbm
219 天前
nuk
219 天前
dbm 啊,B+tree ,性能吊打 sqlite 的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/978875

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX