我看到了类似于我的问题,但对于一般的SQL数据库。它说当你在提交之前插入数据时,只保存命令并将它们保存在RAM中。只有在提交之后,RAM才会被清空,数据才会在数据库中。
但是,我认为我注意到使用sqlite3和Python的不同行为。我在脚本的最后留下了我的提交。我的程序空间不足并中途中止,但这不是因为RAM已满。它说磁盘空间已满,我确认在我的计算机上已经满了,其中很大一部分被我的数据库文件占用。
我知道我需要更多的磁盘空间来创建这个数据库,这不会有问题,但我想知道,至少特别是sqlite3和Python(如果特殊情况重要),我的数据实际发生了什么提交之前的/命令?换句话说,他们在哪里以及如何存储?不同的数据库有什么不同吗?我是否应该担心在使用数据库时使用我的所有RAM,直到最后才提交?
答案 0 :(得分:2)
SQLite在临时rollback journal file中复制未修改的数据页面,并将更改应用于这些相同页面的内存副本。当您进行足够的更改以使内存成为问题时,更改将刷新到原始数据库。回滚日志用于回滚未完成的事务。
不同的数据库如何处理回滚日志在很大程度上取决于数据库实现。符合ACID标准的数据库必须存储未提交的事务数据某处,并且磁盘支持的日志是显而易见的选择。
SQLite文档包含exhaustive explanation关于它如何实现事务的详细信息。