1

毎日インポートする大量のデータを処理するためにテーブルを設定する最善の方法について、一般的な質問があります。このテーブルが急速に拡大するように、毎日 1000 件のレコードを含む 10 個の csv ファイルをインポートします。

これは、小さな int から中程度の int から 30 文字の varchar まで、15 ほどの列で構成されています。

ID フィールドはありません。6 つの列を結合して主キーを形成できます。これは var char の全長で約 45 になります。

インポートしたら、Web フロント エンドを介してサマリー レベルでこのデータをレポートする必要があるため、インポート後にレポート テーブルを作成する必要があります。

このデータ内には、日付、地域、顧客など、毎日のインポートで繰り返される多くのフィールドがあり、毎日の列の半分だけがレコードに固有です。

質問:

  1. ダンプテーブルとしてすぐにすべてを 1 つのテーブルにインポートする必要があります。
  2. インポート プロセスを通じてデータを変換し、インポートを異なるテーブルに分割する必要がありますか
  3. インポート中に一意のキーを取得できる列に基づいて id フィールドを形成する必要がありますか?
  4. これにはauto inc idフィールドを使用する必要がありますか。
  5. これはどのようなテーブルにする必要があります InnoDB など

私の懸念は、このテーブルのデータ過負荷であり、レポートテーブルへの抽出が構築されるにつれてますます困難になりますか?

アドバイス本当に助かります。ありがとう。

4

1 に答える 1

1
  1. autoinc idを持っている方が、持っていないよりも通常は役に立ちます
  2. データの整合性を確保するために、IDを構成する6つの列にuniqインデックスを設定できます
  3. 十分なRAMがあれば、MySQLはデータベース内の何百万ものレコードにかなり快適です
  4. それでも数百万のレコードが心配な場合は、月ごとにデータを別のテーブルに集約するだけです。できない場合は、RAMを追加してください。
  5. パフォーマンスを低下させない限り、インポート中にできるだけ多くのデータを変換します。すでにインポートされているときにデータを変換すると、MySQLサーバーに不要な負荷がかかります。それを回避できる場合は、回避してください。
  6. MyISAMは通常、統計的な種類のデータ、あまり頻繁に更新されない種類のデータに適していますが、InnoDBは過去数年で追いついており(perconaのXtraDBエンジンを見てください)、基本的にパフォーマンスに関しては同じです。

ここで最も重要なポイントは、データ保持率を定義することだと思います。1、2年後に毎日の解像度を保持しなければならないことはめったにありません。

今後も毎日の解像度が必要になる可能性があると思われる場合は、低解像度のフレームに集約してアーカイブします(mysqldump> bzipは非常に効率的です)。

于 2013-02-11T09:43:36.670 に答える