ユーザーがファイルをアップロードおよびダウンロードできるようにするデータベース アプリケーションを作成しています。ファイルはファイル サーバーに保存され、ファイルを処理 (つまり、アップロードとダウンロード) するための PHP スクリプトを使用して Apache HTTP サーバーをセットアップしました。データベースには、ファイル自体ではなく、ファイルへのリンクのみが保存されます。私の質問は次のとおりです。ファイル サーバー上のファイルをどのように整理すればよいですか?
現在、現在の日付に基づいてディレクトリ構造を作成しており、現在の日付/時刻 (ミリ秒を含む) の MD5 ハッシュといくつかのランダムな文字を使用してファイルの名前を変更しています (つまり、「塩」を追加しています)。
\\yyyy\mm\dd\debb40da158040e4f3b93f9576840c07
これ (上記) はデータベースに保存されているリンクです (もちろん、ユーザーがファイルをダウンロードするときにファイルの名前を変更できるように、実際のファイル名もデータベースに保存しています。ユーザーは実際のファイルを見ることはありません。リンク)。
パフォーマンスの問題を回避するためにディレクトリ構造に使用yyyy\mm\dd
し (同じディレクトリに多くのファイルがあると速度が低下する可能性があると言われています)、ファイルの名前を一意の文字列に変更して、ユーザーが同じ名前のファイルをアップロードするときの衝突を回避します。
この種の状況でファイルを保存する最善の方法について、他の意見を求めたいと思います。一部の開発者がファイル名を保持しているのを見てきましたが、ファイル情報テーブルの対応する行のデータベース ID を (接頭辞として) 追加しています。データベースファイル情報テーブルが破損または削除された場合、ファイルが何であるかを把握できます。