为了持久化,我使用 ZODB 来存储内存中存在的一些数据。如果内存中数据的服务每次崩溃,重新启动将从 ZODB 加载数据,而不是查询 MySQL 数据库中的数百或数千行。
似乎每次我将 500K 数据保存到数据库文件中时,我的 .fs 文件都会增长 500K,而不是保持在 500K。举个例子:
storage = FileStorage.FileStorage(MY_PATH)
db = DB(storage)
connection = db.open()
root = connection.root()
if not root.has_key('data_db'):
root['data_db'] = OOBTree()
mydictionary = {'some dictionary with 500K of data'}
root['data_db'] = mydictionary
root._p_changed = 1
transaction.commit()
transaction.abort()
connection.close()
db.close()
storage.close()
我想用 mydictionary 的当前值不断覆盖 root['data_db'] 中的数据。当我打印 len(root['data_db']) 时,它总是从 mydictionary 打印正确数量的项目,但每次运行此代码(使用相同的确切数据)时,文件大小都会增加数据大小,在本例中为 500K。
我在这里做错了什么吗?
最佳答案
当ZODB中的数据发生变化时,它会被追加到文件末尾。旧数据留在那里。为了减少文件大小,您需要手动“打包”数据库。
Google 提出了 this mailing list post .
关于Python:ZODB 文件大小不断增长 - 未更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1335615/