sqlite3:我可以安全地等待commit()

时间:2012-10-25 17:15:43

标签: python sqlite

我将10,000,000条记录插入sqlite库。在完成所有插入之前,我等connection.commit()是否安全?或者有一些内存/溢出风险?未提交的条目是否可能使用所有可用内存并导致页面交换?在每个INSERT之后提交是一个性能杀手,所以我想避免它。

我在Python中使用sqlite3模块

3 个答案:

答案 0 :(得分:2)

一次提交所有插入是一个完全可以接受的优化。如果错误应该发生(这不太可能),那么它将在客户端库中发生,此时您可以考虑解决该问题。但过早地担心这一点是不必要的。

答案 1 :(得分:2)

嗯,首先,sqlite并不是真正意味着处理那么多数据。它通常用于较小的数据集。但是,如果你在每次插入2或3次之后提交说明,那么在提交所有数据时提交这么多数据可能需要更长的时间。

就你的内存/溢出风险而言,sqlite将所有内容转储到文件chache中,然后在commit put中将所有文件缓存转储到sqlitedb文件中。

然而,一次提交不应该给你任何问题。

答案 2 :(得分:1)

SQLite的rollback journal存储数据库文件中已更改的所有页面的旧内容。

如果您只是插入数据,那么您实际上并没有更改数据库中已有的数据(只有一些管理结构),因此不会为事务累积太多的开销数据。

(如果你启用了WAL mode,情况会有所不同。)