根据ZODB文档:
保存点允许数据管理器将工作保存到其存储而无需提交完整事务.""保存点对释放内存也很有用,否则将用于保留事务的整个状态.
根据非常有启发性的文章何时在ZODB(Martijn Pieters)中提交数据:
...在整个交易过程中您可以要求将数据临时存储在磁盘上的一个点.[...]
保存点所做的一件事是调用ZODB缓存的垃圾收集,这意味着当前未使用的任何数据都将从内存中删除.
问题是,我需要在一个事务中存储大量项目,如下所示:
for i, item in enumerate(aLotOfItems):
    database[i]=item
    if i % 10000 ==0:
        transaction.savepoint(True)
transaction.commit()
我有点期望transaction.savepoint以同样的方式工作bsddb3.db.Db.sync.当Db.sync()被调用时,数据库刷新,你可以观察它.但是当设置保存点时,显然数据库和tmp文件都不会增长或者大小发生变化transaction.commit().
我真的很困惑:
设置保存点时实际发生了什么?
它与提交/刷新数据库有什么不同?
如果"要临时存储在磁盘上的数据",保存点在哪里写入数据?
我可以依靠保存点来实现"免费记忆"吗?