小编Din*_*gZh的帖子

ZODB:到event.savepoint写入数据的位置?

根据ZODB文档:

保存点允许数据管理器将工作保存到其存储而无需提交完整事务.""保存点对释放内存也很有用,否则将用于保留事务的整个状态.

根据非常有启发性的文章何时在ZODB(Martijn Pieters)中提交数据:

...在整个交易过程中您可以要求将数据临时存储在磁盘上的一个点.[...]
保存点所做的一件事是调用ZODB缓存的垃圾收集,这意味着当前未使用的任何数据都将从内存中删除.

问题是,我需要在一个事务中存储大量项目,如下所示:

for i, item in enumerate(aLotOfItems):
    database[i]=item
    if i % 10000 ==0:
        transaction.savepoint(True)
transaction.commit()
Run Code Online (Sandbox Code Playgroud)

我有点期望transaction.savepoint以同样的方式工作bsddb3.db.Db.sync.当Db.sync()被调用时,数据库刷新,你可以观察它.但是当设置保存点时,显然数据库和tmp文件都不会增长或者大小发生变化transaction.commit().

我真的很困惑:

  • 设置保存点时实际发生了什么?

  • 它与提交/刷新数据库有什么不同?

  • 如果"要临时存储在磁盘上的数据",保存点在哪里写入数据?

  • 我可以依靠保存点来实现"免费记忆"吗?

python transactions zodb

1
推荐指数
1
解决办法
590
查看次数

标签 统计

python ×1

transactions ×1

zodb ×1