Python:ZODB 文件大小不断增长 - 未更新?

标签 python zodb

为了持久化,我使用 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/

相关文章:

python - 如何强制 matplotlib 在 Y 轴上只显示整数

python - 子进程的输出在时间之前附加到文件中

python - ZODB/ZEO 。从客户端连接到服务器

Python/mysql : Recommender system

python - 有没有更快的方法在 python 中执行 while 循环?

python - 如何删除 ZODB 存储中的 key ?

plone - 在 Plone 中创建自定义 ZODB?

python - 是否有用于提交后对象更改的 ZODB Hook ?

python - 使用python和regexp删除字符串中字符串之间的所有xml标签

python: 是否可以检测我是否在 Paster shell 中?