据ZODB文件 :
保存点允许数据管理器保存工作,它的存储没有提交完整的事务。”“保存点也对,否则将被用来保持交易的全状态可用内存有用。
按照很有启发性的文章当在ZODB提交数据 (马亭皮特斯):
......整个交易在那里,你可以要求数据被暂时存储在磁盘中的一个点。 [...]
有一件事保存点呢,就是呼吁ZODB缓存的垃圾收集,这意味着当前未使用任何数据从内存中删除。
问题是,我需要很多的项目存储在一个事务中,这样的事情:
for i, item in enumerate(aLotOfItems):
database[i]=item
if i % 10000 ==0:
transaction.savepoint(True)
transaction.commit()
我kindof预计transaction.savepoint工作方法一样bsddb3.db.Db.sync
。 当Db.sync()
被调用,数据库被刷新,可看到它。 但是,当一个保存点设置,显然既不是数据库也不是tmp文件增长或大小,直到变化transaction.commit()
我真的很困惑:
当保存点设置什么是实际发生的?
它是如何从commiting /冲洗数据库有什么不同?
如果“数据被暂时存储在磁盘上”,到哪里保存点写入数据?
我能指望保存点到字面意思是“无记忆”?