Python 有没有好用的本地文件实现的 key, value 存储
其实经常有本地存储一些信息数据的需求
一般都是通过各种配置文件比如什么 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 你看看 说的这个吧。
各位大佬架构师们,紧急求助 我们有个报表类的需求,目前架构设计如下 数据量:1TB 左右 数据流转流程 业务数据->( kafka 、flink )->数据仓库( MySQL)…
Chrome的开发者工具是个很强大的东西,相信程序员们都不会陌生,不过有些小功能可能并不为大众所知,所以,写下这篇文章罗列一下可能你所不知道的功能,有的功能可能会比较实用,有的…
(感谢 @文艺复兴记(todd) 投递此文) 目录 组件复用技术的局限性程序的本质复杂性元语言抽象总结 组件复用技术的局限性 常听到有人讲“我写代码很讲究,一直严格遵循DR…