我通过创建一个巨大的对象来测试ZODB,然后它发出警告。 接下来,我继续从root中删除对象,commit。 .fs文件的空间仍为1GB。然后我杀了REPL。我重新打开了python,建立了连接,但现在我似乎无法摆脱这个1 GB的文件(除了尝试从磁盘本身删除它)。
代码类似:
storage = FileStorage('Data.fs')
db = DB(storage)
connection = db.open()
root = connection.root()
随后创建了一些巨大的对象,起初我实际上做了
root['bigObj'] = 'small_str',
transaction.commit()
尝试覆盖。之后我刚刚删除了键/值。
我错过了哪一部分?
答案 0 :(得分:2)
ZODB是仅附加数据库。除非明确告知,否则ZODB永远不会收回或覆盖旧信息。这意味着,如果需要,您可以创建无限的撤消历史记录。
要回收pack ZODB database所需的磁盘空间。
其他数据库(MySQL,PostgreSQL)具有类似的特征。例如,PostgreSQL必须不时VACUUM
。