私が遭遇した本番データベースの1つでこれを見たことがあります。これらの画像は明らかにDBの大部分をカバーしています。たくさん調べた結果、パフォーマンスの点でなぜそれが実際に悪いのかについて、多くの良い答えを見つけることができませんでした。
はい、ストリームフレンドリーではなく、使用するスペースが最大33%増加します: https://stackoverflow.com/questions/9722603/storing-image-in-database-directly-or-as-base64-data
確かに、それはDBに間違ったヒントを与えます: https://stackoverflow.com/questions/9722603/storing-image-in-database-directly-or-as-base64-data
そして、他の答え: mongodbにファイルを保存する これが問題である理由を実際には説明しないでください
しかし、実際に何が起こっているのですか?base64エンコードされた文字列として画像を保存するデータベースがパフォーマンスを失う可能性がありますか?このような慣行により、DBがselect(またはその他の側面)でパフォーマンスを失うのはなぜですか?
この点でNoSQL(MongoDB)とRDBMS(PostgreSQL)のパフォーマンスを指定する回答も必要です。 MongoDBのようなメモリにあるものの性質は、パフォーマンスへの影響をさらに悪化させますか?もしそうなら、なぜですか?この画像は、両方のシステムで動作するbase64文字列としてどのように保存されますか?
私が見ることができる1つの理由は、あなたがそのように不必要な仕事をしているということです。 PostgreSQLはbase64文字列を圧縮してトーストするので、列をEXTERNAL
に設定しない限り、圧縮と解凍の代金を支払う必要があります。そうしないと圧縮されませんが、ストレージスペースとI/Oが無駄になります。帯域幅。
ヒント:圧縮バイナリデータをPostgreSQLに保存する場合は、bytea
列をEXTERNAL
ストレージに設定します。そうしないと、データを圧縮しようとする無駄な試みでCPUを浪費してしまいます。