質問: すごくベーシックな質問だとは思うのですが、Webシステムにおいて、写真(jpegやpngファイル)というのはどのように取り扱うのでしょうか? 例えば、アカウントに写真を設定するとなったときに、Javaであれば、そのクラスのフィールドとして`Picture`クラスの変数に値を設定すると言った感じになるのではないかと思ったのですが、jpegファイルやpngファイルをそのままデータベースに設定したり、できるのでしょうか? そのほかのもの(名前やパスワードなど)の取り扱いであればわかりますが、写真の場合どうなるのでしょうか? 回答お願いします。
回答: 個人的な経験を元に私の感想を書きますが、規模が小さければDBに画像データを格納する方が管理しやすいですが、ある程度の規模(ファイル数や容量)になると、DBとは別のファイルサーバーに画像を保存して、DBにはファイルパスで管理するのが融通が効いて良いですね。 メリット * DB、ファイルサーバそれぞれのバックアップを別々に取ることが出来る→DBは高頻度でとりたい。ファイルサーバーはデイリーで良い。など * 画像の差し替えや、変換を後からできる→サイズ縮小、高圧縮化、など * CDNを使える余地がある→Webサーバーの負荷分散 * DBの負荷を軽減できる→結合や集約した結果、内部的に一時テーブルを作る場合、BLOB型のデータは性能悪化につながることがあるのと、単純に処理するデータ量が減るので負荷軽減が見込める。 デメリット * 別々にリストアしなければいけない * 別途ファイルサーバーが必用 * ネットワーク的に複雑化する * 画像の排他制御をプログラムで行う必要がある(必用ならばですが...) * ファイル名をユニークに保つ必要が出て来る なお、Webサーバーのローカルに画像を置く方式もアリですが、Webサーバー自体をスケールアウトした場合や、冗長化した場合に面倒になるので、ファイルサーバーを別に立てるのが良いかなという感じです。