Python ZODB不释放硬盘空间

Python ZODB不释放硬盘空间,python,python-3.x,zope,zodb,Python,Python 3.x,Zope,Zodb,我通过创建一个巨大的对象来测试ZODB,提交,然后它给出了一个警告。 接下来,我继续从根目录commit中删除对象。.fs文件的空间仍然是1GB。然后我杀了雷普。我重新打开了python,建立了连接,但现在我似乎无法摆脱这个1GB文件(除了试图从磁盘本身删除它) 代码如下: storage = FileStorage('Data.fs') db = DB(storage) connection = db.open() root = connection.root() 然后创造了一些巨大的物体,

我通过创建一个巨大的对象来测试ZODB,提交,然后它给出了一个警告。 接下来,我继续从根目录commit中删除对象。.fs文件的空间仍然是1GB。然后我杀了雷普。我重新打开了python,建立了连接,但现在我似乎无法摆脱这个1GB文件(除了试图从磁盘本身删除它)

代码如下:

storage = FileStorage('Data.fs')
db = DB(storage)
connection = db.open()
root = connection.root()
然后创造了一些巨大的物体,起初我真的做到了

root['bigObj'] = 'small_str',
transaction.commit()
试图覆盖。之后,我刚刚删除了键/值


我缺少什么部分?

ZODB是只附加的数据库。ZODB从不回收或覆盖旧信息,除非明确要求这样做。这意味着您有无限的撤消历史记录,直到需要时创建数据库为止

要回收所需的磁盘空间,请执行以下操作


其他数据库(MySQL、PostgreSQL)也有类似的特性。例如,PostgreSQL必须时不时地进行
VACUUM
ed操作。

顺便说一句,我正在维护一个在线程之间共享的列表。ZODB非常简单,但是这个列表变化很大。考虑到这种只附加的情况,您是否可以对此提出一些建议(可能这不是一个好主意)?ZODB对于大多数用例来说都不应该是问题-如果您使用的是原生ZODB列表,那么它应该在每次更新时只向数据库写入增量(尽管我需要确认这一点)。请参阅-使用PersistentList而不是[]。这就是ZODB的工作原理——你真的无法改变野兽的本性。如果你需要处理大的,易变的,斑点,我建议你考虑替代数据库。在PostgreSQL@PascalvKooten上有一种类似于ZODB的行为:有一些ZODB后端可以配置为丢弃历史修订<代码>重新存储可以执行此操作。但是,默认的
文件存储
后端不能。