私は、主にユーザーの写真から派生した Web アプリを再設計中です。私たちの写真の量は、通常、ユーザーごとに数百万枚から 35 枚までです。
とにかく、私が探しているのは、写真をファイル システムに保存し、データベースで参照する方法を再設計することです。現在のシステムは機能していますが、欠陥がないわけではありません。
現在、私はそれらをそのように保管しています
ユーザー データベース テーブル
pk 1
photo_count 12
最終的にディレクトリになる
storage/000/000/000/000/001/1_640x480.png
スルー
storage/000/000/000/000/001/12_640x480.png
ディレクトリはユーザー pk から取得されます
ファイル名の最初の数字はソート順です
ファイル名は写真のサイズを表します。
これは、写真をデータベースに保存する非常に効率的な方法ですが、欠点がないわけではありません。並べ替えが変更されるたびに、最初に一時ディレクトリに変更を書き込んでから、メイン ディレクトリ内のすべての写真を上書きする必要がありますが、これはそれほど効率的ではありません。また、写真を他のサイトにエクスポートしますが、現在のシステムの問題は、写真が変更された場合、名前が変更されないため、サード パーティのサイトがフィードから写真を更新することを認識できないことです。最後の大きな問題は、写真の数がディレクトリの数と同期しなくなることに関係しています。これにより、データベース photo_count から写真の URL が生成されます。この URL は、存在する場合と存在しない場合があり、一部のサード パーティ サイトで写真のインポート ジョブが失敗する原因となります。
私の意図した解決策は次のことでしたが、専門家の意見が欲しいです。
user database table
pk "1"
photos "stored as a comma separated list of photo names generated from SHA-1" example:
f56c0de1c61fdb926e79e8a0a65bd12930c9.jpg,ec1c55bfb660548a6770238668c4b117d92f.jpg
写真の並べ替え順序をリストに保存することを考えていたので、順序が変わった場合は、写真の名前を変更するのではなく、リストを並べ替えるだけで済みます。
おそらくユーザー pk からディレクトリ構造を導出し続けることができると考えましたが、ある種のハッシュを使用したいのですが、それが好ましい方法である場合、データベースでそれを参照する方法がわかりません。別の列に格納されるだけですか?例
00e4 becomes /00/e4/
私が遭遇しているように見える他の唯一の問題は、まだサムネイルを保存する必要があると仮定した場合の写真のサイズです。ファイル名の末尾に _thumb.jpg を付けることをお勧めしますか?
すべての写真には一意の名前が付けられ、変更時に常に変更されるため、これはすべてサードパーティのフィードに対応すると思います。
この件について専門家の意見を持っている人はいますか?これが最善の解決策かどうかわからないので、他の人が何をしているのか聞きたいです。本当にありがとう。