ユーザがアップロードした画像を受け入れ、ファイル名を変更してファイルシステムに保存するバックエンドを構築しようとしています(いいえ、Instagramではありません)。データベース設計とイメージファイルシステム管理?
イメージの名前を変更し、ユーザフォルダ:
画像/ {ユーザID}/{ユーザID} _ {MD5(タイムスタンプ)} JPG
団体は、データベースに含まれるであろう。
これはいい/十分なモデルですか?
ユーザがアップロードした画像を受け入れ、ファイル名を変更してファイルシステムに保存するバックエンドを構築しようとしています(いいえ、Instagramではありません)。データベース設計とイメージファイルシステム管理?
イメージの名前を変更し、ユーザフォルダ:
画像/ {ユーザID}/{ユーザID} _ {MD5(タイムスタンプ)} JPG
団体は、データベースに含まれるであろう。
これはいい/十分なモデルですか?
基本的にあなたの方法だけで結構ですが、ここに私の提案はあなたにある:あなたはすでにDBにファイル名を保存しているので、
ファイル名をタイムスタンプで保存することは、すべてのファイル名を一意にするため、良い方法です。 – heyanshukla
これは本当ですが、私は正確なタイムスタンプのためにそれらに頼らないと言っていたと思います。私はあなたが何とかmd5されていればcouldntだと思う:Pとにかく、ランダムな文字列を生成するためにrand()を使うと、md5(time())よりもパフォーマンスが良い – aowie1
私はmd5ケース。 – heyanshukla
なぜデータベースからの一意のIDを使用しないと、ファイルを見つけるのがずっと簡単になります。
また、ファイルをどのように構造化するかは制限されません。各ファイルのIDがデータベースに関連付けられている場合は、ユーザー名で保存する必要はないでしょう。
user/{database_id}.jpg
1.jpg、2.jpgなどに行くことで人々が簡単に画像ライブラリ全体にアクセスできるようにしたくない。 –
Ok、 GUIDはそれをデータベースに格納し、その後にファイル名を呼び出します。セキュリティ上の懸念は少なくなりますが、同じ結果になります。 –
ちょっと異なります。ユーザーあたり
上記の数値の大部分が小さい場合、方法はおそらく長い間あなたを良い状態に保つのに十分長くなり、少なくとも始めることができます。
私は、MySQLブロブストレージを使用してbad pressを取得していることを知っていますが、これも簡単な方法です。巧妙なコーディングを行うことなくスケールアウトするためにデータベースを破ることができます。言っ
...
は場合は、お使いのシステムでは、ユーザーが使用すると、ファイルシステムのlimits or performance issuesに遭遇する可能性があるファイルの非常に大きな数字をアップロードすることが予想されます。
あなたがWindows上でホスティングされている場合、多くの人が/アップロードする場合、あなたのファイル名は間違いなく8.3 :)
よりも長くなるように、8.3 filename problem(遅い非常にディレクトリが大きくなる)に気を付けますピーク時の使用率で同時にダウンロードすると、I/O競合を監視する必要があります。 RAID 10ボリュームを使用している場合は、SSDを使用するとさらに向上しますが、ストレージ容量の問題が発生する可能性があります。
同じ人物が複数のフォルダにまたがって同じ画像をアップロードする可能性がある場合、あなたの提案した方法は最も効率的な方法ではありません。その場合、データ(例:md5sum)と1つだけのコピーを保存する(はい、削除に関する管理上の問題があります)。
多くの人から大量の画像がたくさん出てくると思うのであれば、最終的には基礎となるストレージを拡大縮小することを考える必要があります。おそらく、{userid}の関数によってデータを分割し、異なるボリュームやマシンに分割することができます。これにより、同時処理のスループットも向上します。
もう1つの質問:あなたはいつも元の画像だけを提供しているのですか、時には再スケーリングされたコピーを返すでしょうか?一度スケールしてプリスケールされたバージョンを返すことをお勧めします。その場合は、スケールされたコピーのストレージも考慮する必要があります。
いい/十分なモデルは何ですか? – JJJ