1
我测试了ZODB通过创建一个巨大的对象,提交,然后它给了一个警告。 接下来,我开始从根目录中删除对象,提交。 .fs文件在空间上仍然是1GB。然后我杀死了REPL。我重新打开python,建立了连接,但现在我似乎无法摆脱这个1 GB文件(除了试图从磁盘本身删除它)。ZODB不释放硬盘空间
代码是这样的:
storage = FileStorage('Data.fs')
db = DB(storage)
connection = db.open()
root = connection.root()
通过创建一些巨大的物体其次,起初我确实是
root['bigObj'] = 'small_str',
transaction.commit()
,试图覆盖。之后我刚刚删除了键/值。
我缺少什么部分?
顺便说一句,我保持一个列表,我分享的线程。这对ZODB来说非常简单,但是这个列表变化很大。考虑到这种只能追加的情况,你是否可以提供一些建议(可能这不是一个好主意)? – PascalVKooten 2015-04-01 21:49:06
ZODB不应该成为大多数用例的问题 - 如果您正在使用本机ZODB列表,那么它应该在每次更新时只写入数据库的增量(尽管我需要确认这一点)。请参阅http://zodborg.readthedocs.org/en/latest/documentation/guide/modules.html#persistent-list-persistentlist - 使用PersistentList而不是[]。这就是ZODB的工作原理 - 你无法改变野兽的本质。如果你需要处理大的,可变的blob,我建议你考虑替代数据库。这里有一种在PostgreSQL上类似ZODB行为的方法https://github.com/Shoobx/pjpersist – 2015-04-01 22:33:44
@PascalvKooten:有一些ZODB后端可以配置为丢弃历史版本; 'RelStorage'可以做到这一点。然而,默认的'FileStorage'后端不能。 – 2015-04-02 09:30:28