2012-02-01 18 views
3

私は、クライアント用に1000枚の画像を処理できるWebサイトで作業しています。 200人のユーザーを対象に、1人のユーザーあたり20,000件のファイルを送信してください(すぐに1000秒間の使用を希望します)。MySQL 10Mレコードの各ユーザーごとに1つのテーブルまたは別のテーブルdb

  • 画像は所有権と権限を記述したのMySQLのInnoDBデータベース、フォルダツリー内の場所、S3上の物理的なファイルの場所にvFile(一意のID)レコードで表され、大きさなど
  • ユーザーが削除、作成することができ、再注文などvFiles
  • 各ユーザーは自分が所有するvFilesのみ変更できます。

データベースジレンマがある:

  • 各ユーザに対して1つのテーブルまたは
  • 別々のテーブルのすべてのレコードvFile。唯一、第二の溶液は、DBへの負荷を軽減クエリが一人のユーザのためにvFilesを検索します

    • として:

    第2の解決策はいくつかの利点を持っているようです。

  • vFilesの操作(名前の変更、削除、並べ替えなど)は、はるかに小さなテーブルに影響します。

あなたのご意見は高く評価されます。

+0

は、なぜあなたは直接S3の許可を使用しないで一つのテーブル に、別のテーブルに

User Id ownership, permissions, location size etc imageFileIndex 

を入れて? – ajreal

答えて

1

2番目の解決策は、サイトの機能の将来の変更を考慮していないようです。たとえば、後日、ユーザーがイメージを共有できるようにしたい場合や、異なるアクセス許可レベルを持つ複数のユーザーがイメージプールをファイルに許可する場合はどうすればよいですか?ソリューション#2を使用した場合、これらの機能を追加すると重複したエントリが多く発生します。一般的に、同じ情報がある場合、私が読んだことのほとんどは1つのテーブルに入れてから、柔軟性のためにリンクテーブルを追加することをお勧めします。リンクテーブルのuser_id xと一致する項目を選択することは、追加のフィルタリング権限のための3番目の列を使用しても、非常に高速になります。

また、巨大な単一テーブル検索があっても、関連する列にインデックスを追加すると、検索処理が大幅に高速化されます。 #2のほうが良いと思う唯一の状況は、テーブルをロックした場合です。

私はエキスパートではありません。だから私は誰もが思っていることを聞きたいと思います。

0

次の表を使用し構造

imageFileIndex vFile 
関連する問題