2016-10-07 9 views
0

私は20個のsqliteデータベース(DBごとに50個のテーブルと約10万レコード)を持っています。 これらの20のデータベースを1つのマスタDBに結合したいと考えています。 概念は、レコードが適用可能なドメインを示す追加の列を持つことです。例えばデータベースの結合:共通レコードの識別 - 最も効率的な方法


FRUIT | COLOR | SHAPE 
---------------------- 
apple | red | round 
banana| yellow | curved 

表B

FRUIT | COLOR | SHAPE 
---------------------- 
apple | red | round 
banana| yellow | curved 

表C

FRUIT | COLOR | SHAPE 
---------------------- 
apple | red | round 
banana| blue | straight 

これらの表(A、B及びC)は、マスターテーブルに結合されるであろう:

マスターテーブル

FRUIT | COLOR | SHAPE | DOMAIN 
--------------------------------- 
apple | red | round | 0b111 
banana| yellow | curved | 0b110 
banana| blue | straight| 0b001 

Iは、テキストファイル形式でデータベースを持っています(すなわち、タブ区切りリスト)。私はPythonを使用してそれらをsqlite DBにインポートします。 はどのようにして最も効率的ですかこのマージプロセスは何ですか?

私は2つのアイデアを持っている:

  1. は、マスタDBに最初のDBをインポートします。次のDBをインポートするときは、完全なレコードが存在するかどうかを確認してください。有効な場合は、適用可能性列に対してSQL UPDATE問合せを実行します。そうでない場合は、INSERTを使用して新しいレコードを作成します。

  2. テーブルの種類ごとに、pythonで20個のドメインテーブルを読み込み、すべてのドメインまたはサブセットにレコードが存在するかどうかを確認します。次に、適用可能なレコードをマスタDBにインポートします。

これらの操作を効率的に行う方法があるかどうかを知りたいと思います。各データベースのサイズとこのインポートを何度もやる必要があるため、できるだけプロセスを高速化する必要があります。

答えて

0

各レコード*ドメインに対して個々の選択と更新を行うのは、メモリ内のレコードをマージするよりも時間がかかります。

メモリに20個のテーブルをロードします。メモリ内のレコードの完全なリストを作成します。 DBへの一括挿入マージのため

おそらく高速化の効率的な方法は次のようになり:

ロード(キー、値) - ドメインテーブルに(現在のドメインコード、NULL)>一組に、別途キー - >値辞書。

次に、(key、value)を設定し、各ドメイン辞書の値を調べ、マスター辞書にドメインコードを設定します。

次に、前の手順の結果を確認し、約1000レコードごとに1回コミットするバルク挿入を実行します。

関連する問題