我通过创建一个巨大的对象来测试ZODB,提交,然后它给出一个警告。接下来,我继续删除根目录中的对象,即commit。.fs文件仍有1 1GB的空间。然后我杀了REPL。我重新打开了python,建立了连接,但现在我似乎无法摆脱这个1 GB的文件(除了试图将其从磁盘本身删除)。
类似这样的代码:
storage = FileStorage('Data.fs')
db = DB(storage)
connection = db.open()
root = connection.root()然后创建了一些巨大的对象,一开始我确实这样做了
root['bigObj'] = 'small_str',
transaction.commit()尝试并覆盖。之后,我删除了键/值。
我漏掉了哪部分?
发布于 2015-04-02 05:39:43
ZODB是仅附加的数据库。除非被明确告知,否则ZODB从不回收或覆盖旧信息。这意味着,如果需要,您可以在创建数据库时拥有无限的撤消历史记录。
要回收磁盘空间,您需要使用pack ZODB database命令。
其他数据库(MySQL、PostgreSQL)也有类似的特征。例如,PostgreSQL必须时不时地被VACUUM。
https://stackoverflow.com/questions/29401207
复制相似问题