DBにできるだけ速く単純な行をロードするローダーをsqliteに書き込もうとしています。入力データは、postgresDBから取得した行のように見えます。sqliteに移動する行の概算量:20milから100mil。プロジェクトの制限により、sqlite以外のDBは使用できません。
私の質問は: そのようなローダーを書くための適切なロジックは何ですか?
最初に、カプセル化されたジェネレーターのセットを作成しようとしました。これは、Postgresから1行を取得し、それを少し修正してsqliteに入れます。行ごとに、個別のsqlite接続とカーソルを作成することになりました。そして、それはひどいように見えます。
2回目の試行で、sqlite接続とカーソルをジェネレーターからスクリプトの本体に移動しました。20milのすべてのレコードをフェッチして処理するまで、データをsqliteにコミットしないことが明らかになりました。そして、これはおそらく私のすべてのハードウェアをクラッシュさせる可能性があります。
3回目の試行では、Sqlite接続をループから遠ざけることを検討しましたが、処理して1行をSqliteにプッシュするたびにカーソルを作成/閉じます。これは良いですが、オーバーヘッドもあると思います。
また、トランザクションで遊ぶことも検討しました。行がSqliteにプッシュされるたびに、1つの接続、1つのカーソル、1つのトランザクション、およびジェネレーターで呼び出されるコミット。これは私が行く正しい方法ですか?
Pythonでそのようなコンポーネントを書くために広く使われているパターンはありますか?まるで自転車を発明しているような気がするからです。