sqlite3 with python:在提交之前存储的数据在哪里?

我看到了类似于我的问题,但对于一般的SQL数据库.它说当你在提交之前插入数据时,只保存命令并将它们保存在RAM中.只有在提交之后,RAM才会被清空并且数据将在数据库中.

但是,我认为我注意到使用sqlite3和Python的不同行为.我在脚本的最后留下了我的提交.我的程序空间不足并中途中止,但这不是因为RAM已满.它说磁盘空间已满,我确认在我的计算机上确实已经满了,很大一部分被我的数据库文件占用.

我知道我需要更多的磁盘空间来创建这个数据库,这不会有问题,但我想知道,至少特别是sqlite3和Python(如果特殊情况很重要),我之前的数据/命令实际发生了什么提交?换句话说,他们在哪里以及如何存储?不同的数据库有什么不同吗?我是否一直担心在使用数据库时不使用我的所有内存而不是直到最后?

最佳答案 SQLite在临时
rollback journal file中复制未修改的数据页,并将更改应用于这些相同页的内存副本.当您进行足够的更改以使内存成为问题时,更改将刷新到原始数据库.回滚日志用于回滚未完成的事务.

不同的数据库如何处理回滚日志在很大程度上取决于数据库实现.符合ACID的数据库必须在某处存储未提交的事务数据,并且磁盘支持的日志是显而易见的选择.

SQLite文档包含一个关于它如何实现事务的exhaustive explanation.

点赞