2017-11-11 15 views
0

毎日フラットファイル(CSV)を受け取ります。その内容はデータベースにインポートされます(Webフォーム、POSなどのデータ入力ではなく)。レコードには40個のフィールドがあり、60万個の固有レコードがあります。フラットファイル入力 - MySQLベストプラクティス

これまでのところ、これをリレーショナルデータベースにする必要はありませんでしたが、それは効率化を図るための正規化です。

これを最初からやり直していたら、どうにかしてデータを入力していたら、それをどのように処理するのか分かります(すべてのリソースをカバーしていますすでに大量のデータがあり、それをリレーショナルにする必要があるときは、それをカバーするものはありません)。そして、CVSが毎日入ってくると、データベースの設定が完了したらデータのインポート方法がわかりません。これらの40のフィールドを5つのテーブルに分割すると、その毎日のファイルを同じ方法で分割し、一度に1つずつインポートする必要がありますか?外部キーはそのように更新されますか?

誰かが私を正しい方向に押し込むことができたら、私は自分自身でもっと掘りなさい。

同じプロジェクトに直面した場合、そのようなデータベースを作成して日々の更新を行う方法はありますか?

ありがとうございます!

答えて

0

現在の内容(CSV構造とデータ)とは関係なく、データベース構造を作成します。例えば。将来のニーズに合わせてテーブルを整理し、それらの間の関係を考え、定義し、適切なインデックスを適用します。

私の意見でやむを得ない第二のステップとして、あなた自身のプログラミング言語で少しのプログラムを書いてください。それは

  • 検証/フェッチデータをサニタイズ、主に(CSV)ファイルからレコード/行を読み込む

    • することができるはずです
    • インポート/必要に応じて対応するデータベーステーブル内のデータを、保存してください。 「必要に応じて」というのは、時間の経過とともに、最初のDB構造決定に予期せず影響を与える可能性のある多数の要素が現れることを意味します。たとえば、いくつかの一時的なテーブルの必要性。また、トリガーとストアドプロシージャによって与えられる利点から利益を得るべきです。
    • は、インポートプロセスで発生したエラーと例外を適切に処理します。たとえば、最終的な「重複キー」の問題のために、ファイル内のデータにエラーが発生する可能性があるため、一部のレコードを特定の日にインポートできませんでした。これは、輸入が中断することを意味するものではありません。レコードを読んで、それを保存してみてください。問題が発生した場合は、それを処理するか(別のファイルに行をコピーするか、特殊なテーブルに保存して後で編集/改訂して再インポートしてください)、プログラムが次のレコードでコースをたどるようにします。
    • すべての(主な)操作を適切にログに記録し、読みとられたレコードと問題のあるレコードのカウンタを維持します。
    • は、インポート後に毎日のファイルをバックアップディレクトリに自動的にコピーし、不要になるまで自動的にコピーします。
    • 最終的には、操作のステータスについて電子メールで通知します。

    第3のステップは、サイクル全体を自動化するソリューションを見つけることです。たとえば、タスク/ cron-jobsマネージャーを見つけて、プログラムを毎日、1日に1回または2回、手動で開始する必要はありません。

    ddatabase構造に基づいてファイルを別々のファイルに分割することに関して、それは必要ではありません。プログラムがファイルを読み込み、それに対応してデータのインポートを処理する必要があるため、冗長なステップになります。

    プログラムの種類:ウェブソリューションでなければならないため、いつでも必要なときにアクセスして変更することができます。

    幸運。

  • +0

    私が探していた偉大な輪郭と正確な方向。おかげでaendeerei! –

    関連する問題