CSV 形式のデータが大量にあります。単一のテキスト フィールド (主キー) に基づいてこのデータをインデックス化できるようにする必要があるため、データベースに入力することを考えています。以前のプロジェクトで sqlite に精通していたので、そのエンジンを使用することにしました。
いくつかの実験の後、1 億件のレコードを 1 つのテーブルに保存するのはうまくいかないことに気付きました。この問題に対する 2 つの解決策を思い付くことができました。
- データをいくつかのテーブルに分割する
- データをいくつかのデータベースに分割する
私は2番目の解決策を採用しました(1つの巨大なファイルではなく、いくつかの大きなファイルが生成されます)。私のパーティション方法は、主キーの最初の 2 文字を調べることです。各パーティションには約 200 万のレコードがあり、約 50 のパーティションがあります。
私は sqlite3 モジュールを使用して Python でこれを行っています。プロセス全体を通して、50 の開いたデータベース接続と開いたカーソルを保持します。行ごとに、主キーの最初の 2 文字を確認し、辞書検索によって適切なカーソルを取得し、(カーソルで execute を呼び出して) 1 つの挿入ステートメントを実行します。
残念ながら、挿入速度はしばらくすると耐えられないレベルまで低下します (合計で約 1,000 万件の処理レコード)。これを回避するにはどうすればよいですか? 私がやっていることを行うためのより良い方法はありますか?