【问题标题】:sqlite3 with python: where is data stored before commit?sqlite3 with python:提交前数据存储在哪里?
【发布时间】:2013-09-02 03:56:58
【问题描述】:

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

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

我知道我需要更多的磁盘空间来创建这个数据库,这不会成为问题,但我想知道,至少特别是对于 sqlite3 和 Python(如果特定情况很重要),我的数据实际发生了什么/commands 在提交之前?换句话说,它们在哪里以及如何存储?不同的数据库有区别吗?在处理数据库时,我是否应该担心直到最后才提交而耗尽我所有的 RAM?

【问题讨论】:

    标签: python memory sqlite commit


    【解决方案1】:

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

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

    SQLite 文档包含一个exhaustive explanation,说明它是如何实现事务的。

    【讨论】:

      猜你喜欢
      • 2014-09-05
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 2015-11-17
      相关资源
      最近更新 更多