0

新しいプロジェクト用に MySQL データベースを設計しています。毎日 50 ~ 60 MB のデータをインポートします。

主キーを持つメイン テーブルがあります。次に、独自の主キーとメイン テーブルを指す外部キーを持つ子テーブルが作成されます。

新しいデータは、巨大なテキスト ファイルから解析する必要があり、マスター データベースにインポートする前にいくつかの小さな操作を行う必要があります。解析とインポート操作には大量のトラブルシューティングが必要になる可能性があるため、新しいデータを一時データベースにインポートし、マスターに追加する前にその整合性を確保したいと考えています。

このため、最初は、毎日新しいデータを解析して別の一時データベースにインポートすることを考えていました。このようにして、マスターに追加する前にデータを調べることができ、同時に、後で個々の一時データベースからマスターを再構築する必要がある場合に備えて、毎日のデータを別のデータベースとして保存することができます。

テーブル間のリレーショナル整合性を維持するために、InnoDB エンジンで主キー/外部キーを使用することを検討しています。これは、毎日新しいデータをインポートするときに、自動インクリメント ID (主キー) に重複がないことを心配する必要があることを意味します。

では、この状況を考えると、何が最善でしょうか?

  1. マスターのコピーを作成し、毎日マスターのコピーに直接インポートします。既存のマスターを新しいコピーに置き換えます。

  2. 毎日新しいデータを一時データベースにインポートしますが、主キーの自動インクリメント開始値をマスターの最大値よりも大きくなるように変更します。次に、すべてのテーブル (メイン テーブルとその子テーブル) の主キーの自動インクリメント値も変更しますか?

  3. 主キーの値を気にせずに、毎日新しいデータを一時データベースにインポートします。主キーの競合なしで一時データベースをマスターとマージする他の方法を見つけますか? この戦略を使用する場合、子テーブルとのすべての関係が正しいままであることを確認しながら、新しいデータのメイン テーブルの主キーを更新するにはどうすればよいですか?

4

1 に答える 1

0

これがあなたが作っているほど複雑かどうかわかりませんか?

なぜこれをしないのですか:

  1. 生データを一時テーブルにインポートします (なぜ別のデータベースにする必要があるのですか?)
  2. 一時テーブルで変換/整合性チェックを実行します。
  3. データに問題がなければ、マスター テーブルに直接挿入します。
  4. インポートされるデータに依存しない、マスター テーブルで自動インクリメント ID を使用します。これにより、一意の ID、インポートに存在した可能性のある元の ID を持つことができます。
  5. レコードのインポート元のレコードを提供するマスター テーブルにフィールドを追加します。
  6. データをマスター テーブルにコピーするだけでなく、マージしたデータに関連付けるログを作成します。間違っている/悪いことがわかった場合にデータを取り消すのに役立ち、監査証跡を提供します。

最終的には、サンドボックス データベースをセットアップし、一連のストアド プロシージャを記述して、そのがらくたをテストするだけです。=)

于 2013-02-18T23:20:15.937 に答える