ユーザーのアップロードを処理するための Django の推奨事項は、それらをファイルシステムに保存し、ファイルシステムのパスをデータベース列に保存することです。これは機能しますが、対処したくない問題がいくつかあります。
取引なし
ファイルシステムとデータベースの同期を維持する簡単な方法がない
データが 2 か所に保存されるため、バックアップが複雑になる
私の解決策は、画像を base64 でエンコードされた文字列としてテキスト列 ( https://djangosnippets.org/snippets/1669/ ) に保存することです。これにはより多くのスペースが必要ですが、レプリケーションは非常に簡単になります。
このアプローチの懸念はパフォーマンスです。画像リクエストごとにデータベースにヒットするのは望ましくありません。妥当なキャッシング ヘッダーと一緒に、ある種のサーバー側キャッシング システムが必要です。たとえば、誰かが「/media/documents/earth.jpg」を要求した場合、最初にキャッシュを参照し、そこにファイルが見つからない場合はデータベースにアクセスする必要があります。
質問:
私の目的に適したキャッシュ ツールは何ですか?
これらの要件を考えると、すべての画像リクエストが Django アプリケーションを通過する必要がありますか? または、これを防ぐために使用できるキャッシュ ツールがあります。特定の人だけがアクセスできる特定のファイルがあります。これらの場合、承認を確認する他の方法がないため、リクエストはアプリケーションを通過する必要があると思います。
このツールがファイルをファイル システムにキャッシュする場合、ハッシュ化されたディレクトリは、1 つのディレクトリにファイルが多すぎるという問題を緩和するのに十分でしょうか? たとえば、ephant.gif のハッシュ化されたディレクトリ パスは、/e/el/elephant.gif のようになります。