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

dcr*_*ger 5 python memory sqlite commit

我看到了一个与我的问题类似的问题,但总体来说是针对SQL数据库的。它说,当您插入数据但在提交之前,仅保存命令并将它们保存在RAM中。只有在提交之后,才会清空RAM,并且数据将存储在数据库中。

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

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

Mar*_*ers 6

SQLite 将未修改的数据页复制到临时回滚日志文件中,并将更改应用到这些相同页的内存副本中。当您进行足够多的更改以致内存成为问题时,更改将被刷新到原始数据库中。回滚日志用于回滚未完成的事务。

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

SQLite 文档包含关于它究竟如何实现事务的详尽解释。