10,000,000 以上のレコードを sqlite ベースに挿入します。connection.commit()
すべての挿入が完了するまで待っても安全ですか? または、メモリ不足/オーバーフローのリスクがありますか? コミットされていないエントリが利用可能なすべてのメモリを使用し、ページ スワッピングを引き起こす可能性はありますか? それぞれの後にコミットINSERT
することはパフォーマンス キラーなので、避けたいと思います。
Pythonでsqlite3モジュールを使用しています
10,000,000 以上のレコードを sqlite ベースに挿入します。connection.commit()
すべての挿入が完了するまで待っても安全ですか? または、メモリ不足/オーバーフローのリスクがありますか? コミットされていないエントリが利用可能なすべてのメモリを使用し、ページ スワッピングを引き起こす可能性はありますか? それぞれの後にコミットINSERT
することはパフォーマンス キラーなので、避けたいと思います。
Pythonでsqlite3モジュールを使用しています
すべての挿入を一度にコミットすることは、完全に受け入れられる最適化です。エラーが発生した場合 (可能性は低い)、クライアント ライブラリ内で発生するため、その時点でその問題の解決を検討できます。しかし、時期尚早に心配する必要はありません。
そもそも、sqlite はそれほど多くのデータを処理することを意図したものではありません。通常、これは小さなデータ セット用です。ただし、一度にすべてをコミットすると、2 回または 3 回の挿入ごとにコミットする場合よりも、それだけの量のデータをコミットすると時間がかかる場合があります。
メモリ/オーバーフローのリスクに関する限り、sqlite はすべてをファイル キャッシュにダンプし、コミット時にすべてのファイル キャッシュを sqlitedb ファイルに格納します。
ただし、一度にコミットしても問題はありません。
SQLiteのロールバックジャーナルは、データベースファイルで変更されたすべてのページの古いコンテンツを保存します。
データを挿入するだけの場合は、データベースにすでに存在する多くのデータ(一部の管理構造のみ)を実際に変更することはないため、トランザクションのオーバーヘッドデータはあまり蓄積されません。
( WALモードを有効にした場合は状況が異なります。)