sql >> データベース >  >> RDS >> Mysql

Base64イメージがデータベースから選択してエンコードするときに検出される速度低下

    経験則として、データベースにファイルを保存しないでください。

    mysqlマニュアルはそれについて何と言っていますか? http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-optimization-tips.html

    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

    10万人のユーザーに成長したときはどうですか

    彼らが画像ファイルをどのように扱うか。パフォーマンスの問題では、ラージユーザーが関与している場合、それは私に継ぎ目があります。100000ユーザーとそのサブフォルダーに対して100000フォルダーが必要です。大量のユーザーが同じルートフォルダを参照する場合、ファイルシステムが各一意のフォルダを処理する方法。

    CDNを使用するか、BTRFSのようなこれに特に適したファイルシステムを使用してください

    データベースには、優れた検索機能、優れたスレッドセーフ接続、優れたセッション管理があります。大規模な操作が含まれる場合、このシナリオは変更されますか

    はい確かに。ファイルとそのファイルパスに関するすべての情報をデータベースに保存して、最大限に活用してください。次に、ファイル自体をファイルシステムに保存します。両方の長所を活用できます。



    1. SQLを使用して連続する日付範囲を検出する

    2. PHPで動的なpostgresプリペアドステートメントを作成する方法

    3. 2つのフィールドでgroupbyを使用し、SQLでカウントする

    4. 特別なクエリの概要