sqlite3 / C事务开始结束 - 溢出?

时间:2016-11-04 10:51:37

标签: c memory-management sqlite transactions

在嵌入式系统上的C(内存存在问题)中,尝试优化性能,多个插入组合成更大的事务

直观地说,SQLITE必须将未发送的事务保存在有限内存中的某个缓存中。

  • 是否可能在“BEGIN TRANSACTION'”的两次调用之间插入太多内容。并且'结束交易'?缓存可以溢出吗?
  • 或者,sqlite3会在发生溢出之前处理它并启动事务吗?
  • 如果缓存可能会溢出,调用BEGIN / END的最佳策略是什么?

1 个答案:

答案 0 :(得分:2)

您所做的任何更改都将写入数据库文件。为了支持回滚,已更改的数据库页面的旧内容将保存在日志文件中。 提交事务时,只删除日志文件;当您回滚事务时,将回写这些页面。

因此,只要您有足够的磁盘空间,就不会限制事务中的数据大小。

(缓存可以帮助避免一些写入,但它透明地工作,不会影响代码的语义。)