経験則として、データベースにファイルを保存しないでください。
mysqlマニュアルはそれについて何と言っていますか?
Webサーバーでは、画像やその他のバイナリアセットをファイルとして保存し、パス名はファイル自体ではなくデータベースに保存します。ほとんどのWebサーバーは、データベースの内容よりもファイルのキャッシュに優れているため、ファイルの使用は一般的に高速です。 (ただし、この場合、バックアップとストレージの問題を自分で処理する必要があります。)
base4でエンコードされたファイルをデータベースに保存しないでください
正常に動作しますが、予想していたほど時間がかかります。したがって、画像のサイズは33%大きくなり、全体的に膨らんで見えます。
ご存知のように、エンコード/デコーディングの不要なオーバーヘッドと余分なスペースが使い果たされたため、データのやり取りも増えました。
@mike-mが述べたように。 Base64エンコーディングは圧縮方式ではありません。 Base64エンコーディングを使用する理由は、@ mike-mが投稿したリンクによっても回答されます。Base64エンコーディングは何に使用されますか?
要するに、S3であろうとなかろうと、ファイルシステムに画像を保存する前にbase64エンコード画像によって得られるものはなく、失うものもたくさんあります。
base64を使用せずにGzipまたは他の形式の圧縮についてはどうでしょうか。繰り返しますが、答えは、得るものはなく、失うものはたくさんあるということです。たとえば、1941980 JPEG画像をgzipで圧縮し、4000バイトを節約しました。これは0.2%の節約になります。
その理由は、画像がすでに圧縮形式になっているためです。これ以上圧縮することはできません。
画像を圧縮せずに保存すると、ブラウザや他のクライアントに直接配信したり、キャッシュしたりできます。圧縮されている(またはbase64でエンコードされている)場合は、アプリで解凍する必要があります。
最新のブラウザは、HTMLに埋め込まれたbase64画像を表示できますが、キャッシュできず、データは必要なサイズよりも約30%大きくなります。
これは標準の例外ですか?
ユーザーはそこにデータと画像を投稿でき、すべてが安全です。
ユーザーが自分の画像をダウンロードしたり、自分と共有したりできる画像をダウンロードできるということだと思います。これは、ファイルシステムのWebスペースからファイルを保存し、データベースのパスのみを保存することで簡単に実現できます。次に、ファイルは fpassthru を使用して(必要なチェックを行った後)クライアントに送信されます。 a>
10万人のユーザーに成長したときはどうですか
彼らが画像ファイルをどのように扱うか。パフォーマンスの問題では、ラージユーザーが関与している場合、それは私に継ぎ目があります。100000ユーザーとそのサブフォルダーに対して100000フォルダーが必要です。大量のユーザーが同じルートフォルダを参照する場合、ファイルシステムが各一意のフォルダを処理する方法。
CDNを使用するか、BTRFSのようなこれに特に適したファイルシステムを使用してください
データベースには、優れた検索機能、優れたスレッドセーフ接続、優れたセッション管理があります。大規模な操作が含まれる場合、このシナリオは変更されますか
はい確かに。ファイルとそのファイルパスに関するすべての情報をデータベースに保存して、最大限に活用してください。次に、ファイル自体をファイルシステムに保存します。両方の長所を活用できます。