轻松地将python对象转储到文件中,然后将其加载回。
pickle-warehouse的Python项目详细描述
pickle仓库使保存python变得容易 对象到具有有意义标识符的文件。
如何使用
pickle仓库提供了一个类似字典的对象 与上的特定目录关联的 你的电脑。
from pickle_warehouse import Warehouse warehouse = Warehouse('/tmp/a-directory')
键对应于文件,并且值得到 腌制到文件。
warehouse['filename'] = range(100) import pickle range(100) == pickle.load(open('/tmp/a-directory/filename', 'rb'))
你也可以阅读和删除东西。
# Read range(100) == warehouse['filename'] # Delete del(warehouse['filename'])
最酷的部分是钥匙被解释 以一种奇特的方式。除了字符串和类似字符串的对象之外, 您可以使用字符串的iterable;所有这些索引都引用 到文件/tmp/a-directory/foo/bar/baz:
warehouse[('foo','bar','baz')] warehouse[['foo','bar','baz']]
如果你把一个相对路径传递给一个文件,它会像你期望的那样被分解; 也就是说,字符串在斜杠和反斜杠上被拆分。
warehouse['foo/bar/baz'] warehouse['foo\\bar\\baz']
注意:指定绝对路径不会保存仓库目录之外的内容。
warehouse['/foo/bar/baz'] # -> foo, bar, baz warehouse['C:\\foo\\bar\\baz'] # -> c, foo, bar, baz # (lowercase "c")
如果你传递一个url,它也会以合理的方式被分解。
# /tmp/a-directory/http/thomaslevine.com/!/?foo=bar#baz warehouse['http://thomaslevine.com/!/?foo=bar#baz'] # /tmp/a-directory/thomaslevine.com/!?foo=bar#baz warehouse['thomaslevine.com/!?foo=bar#baz']
日期和日期时间转换为YYYY-MM-DD
格式。
import datetime # /tmp/a-directory/2014-02-26 warehouse[datetime.date(2014,2,26)] warehouse[datetime.datetime(2014,2,26,13,6,42)]
你可以混合这些格式!
# /tmp/a-directory/http/thomaslevine.com/open-data/2014-02-26 warehouse[('http://thomaslevine.com/open-data', datetime.date(2014,2,26))]
它也有典型的字典方法,比如keys
,values
,items
,
以及update
。
何时使用
pickle仓库是用于需要持久存储python对象的情况。 如果你想要一个内存pickle存储,看看 _ pickledb:https://pythonhosted.org/pickleDB/。
腌菜仓库绝对比蒙哥好,所以你应该在任何地方使用 你以前使用Mongo的地方。泡菜仓库设计用于 编写需要可伸缩性的繁重工作负载(容易分片),传统的 数据库可靠性(酸)、灵活的模式和高度可配置的索引。
腌菜仓库呈酸性
这就是它是如何做到这一点的。
-
原子性
- 写入被重命名的临时文件。
- 一致性
- 我不知道这个,但我很确定我有。
- 隔离
- 同时写入的处理非常干净。如果在写入过程中发生读取,则会引发错误,您可以重试。
- 耐久性
- 所有数据立即保存到磁盘。
Mongo替换功能清单
- 给fsync打两次电话,确认一下。
- 读写模式验证(可配置),因为谁知道你昨天做了什么,或者你以后是否改变主意?
- PID+随机数(+散列?)用于生成随机数
- inode耗尽