2

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

我在 Python 中使用sqlite3模块

4

3 回答 3

2

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

于 2012-10-25T17:18:33.540 回答
2

好吧,首先,sqlite 并不是真的要处理那么多数据。它通常用于较小的数据集。但是,如果您要在每 2 或 3 次插入后提交,那么在一次提交所有数据时提交这么多数据可能需要更长的时间。

就您的内存/溢出风险而言,sqlite 将所有内容转储到文件缓存中,然后在提交时将所有文件缓存放入 sqlitedb 文件中。

但是,一次全部提交不应该给您带来任何问题。

于 2012-10-25T17:20:12.337 回答
1

SQLite 的回滚日志将所有页面的旧内容存储在数据库文件中。

如果你只是插入数据,你实际上并没有改变很多已经在数据库中的数据(只是一些管理结构),所以不会为事务积累太多的开销数据。

(如果您启用了WAL 模式,情况会有所不同。)

于 2012-10-25T18:00:07.147 回答