本質的にではありませんが、大きなBLOBがテーブルとメモリキャッシュを詰まらせている場合、パフォーマンスが低下することは間違いありません。
はい、これは一般的なアプローチです。通常は、関連付けられている各テーブルにちなんで名前が付けられ、主キーのみに基づくファイル名(理想的には整数、ユーザーが送信するものはありません)を含むフォルダーを作成します。
これはより良い考えですか?場合によります。データストアが1つしかないこと、およびWebユーザーに何かへの書き込みアクセス権を与えることを心配する必要がないことには、展開が簡単であるという利点があります。また、実行中のアプリのコピーが複数ある場合(アクティブ-アクティブ負荷分散など)、ストレージを同期する必要があります。これは、ファイルシステムよりもデータベースの方がはるかに簡単です。
BLOBではなくファイルシステムを使用する場合、問題は、フォルダにエイリアスを指定することでWebサーバーにファイルシステムを提供させるかどうかです。
- +は超高速です
- +キャッシュが適切
- -追加のサーバー構成:仮想ディレクトリ;目的の
Content-Type
を返すには、適切なファイル拡張子が必要です - -追加のサーバー構成:
Content-Disposition: attachment
を追加する必要があります /X-Content-Type-Options
XSS対策の一環としてHTMLのIEスニッフィングを停止するヘッダー
または、MySQL BLOBから提供する必要があるように、サーバー側スクリプトでファイルを吐き出すことでファイルを手動で提供しますか?
- -遅い可能性があります
- -適切にキャッシュするには、かなりの手動のIf-Modified-SinceおよびETag処理が必要です
- +はアプリケーション独自のアクセス制御方法を使用できます
- +サービングスクリプトから正しいContent-TypeおよびContent-Dispositionヘッダーを簡単に追加できます
これはトレードオフであり、世界的に受け入れられている答えは1つではありません。