0

エンティティ データを格納する「マスター」テーブルと、各エンティティの動的データを格納するエンティティ属性値テーブルへの csv --> データベース インポートを実行する従来の php Web アプリがあります。

インポート プロセスは、マスター テーブルへの INSERT と各行の EAV テーブルへの複数の INSERT を使用して、csv ファイルを 1 行ずつ繰り返します。

このプロセスは遅く、mysql のチューニングについてほとんど知られていないことから、LOAD DATA ステートメントは通常、一連の INSERT よりもはるかに高速であることがわかります。ただし、EAV プロセスのため、csv ファイルではなくデータベース クエリの結果に基づいて、反復を実行する必要があります。

  • 修正する価値はありますか?

  • 各ファイルに数千万のレコードがあり、通常、実際に属性にマップされているファイル フィールドの 2/3 未満である場合、違いはありますか?

4

1 に答える 1

0

便利な変更のように聞こえます。私がすることは、CSV を 2 つのファイル (master テーブルと eav テーブル) に前処理することです。注意が必要なのは、これら 2 つのファイル間にある種のリンクを確立して、正しい外部キーを使用して eav テーブルに挿入できるようにすることです。

次の場合、問題は単純化されます。

  1. ロードを実行している間、システムへの他の書き込みアクセスをロックアウトできます
  2. マスターテーブルの主キーは増分整数です

その場合、事前に eav 外部キー値を簡単に「知る」ことができ、いずれかのテーブルのデータをロードする前に適切に設定できます。

そうでない場合は、マスター テーブル レコードの主キー値を取得し、LOAD DATA を送信し、それに応じて eav レコードとリンクする方法を理解する必要があります。

于 2011-01-31T19:42:11.877 に答える