- ベストアンサー
DBにデータファイルを格納するメリット
お世話になります。 勉強がてら携帯向けにPHP+MySQLで画像(Flash含)や動画配信するサイトを構築しています。 画像はデータベースに格納するか、ハードディスクから読み込むか迷っています。 イマイチそれぞれのメリットデメリット、また制限事項などを理解できていないのですが、その辺りをどなたかわかりやすくご教授いただけませんでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
2番の方の御回答に付け加えると、メリットに、セキュリティの向上も上げられるでしょうか。 DBサーバは、www サーバよりはるかにセキュリティが厳重に設定できます。ファイアウォールの中にいて外界から直接アクセスできず、www サーバ(かそのプロキシ)に向けてのみ、しかもDBポートだけ開けておく、という状態で運用されるなら、www サーバのようなアタックも受けないし、万一wwwサーバに侵入されても、DBのコンテンツをごっそり盗まれるまでには、まだ色々とバリケードが立てられます。 一方、www サーバに重要な画像コンテンツを直接置いてしまうと、うっかり下手な symbolic link を作ったり httpd のバグで、それが URL として直接取得できてしまうとか、www サーバに侵入されてしまうとか、色々な危険があります。まあ、CGI の get 引数の規則性からコンテンツが順次たぐれてしまうという設計だと、ファイアウォールも形無しですが。 DBサーバに置くデメリットは、勿論スピードでしょう。DB → www → ユーザとBLOB転送を最低2回することになりますから。
その他の回答 (2)
- chukenkenkou
- ベストアンサー率43% (833/1926)
#1さんの回答に異論があります。 >DB上にはバイナリではなく変換してデータがおかれる これはどういう意味でしょうか? BLOBなど、バイナリのまま大容量のデータを格納するデータ型があり、変換などは行われません。 画像などをDBに格納すれば、他の関連情報と同期を取れたままバックアップや移行が行えるし、SQLで操作が可能です。 別ファイルとして管理すれば、同期を取った管理は、利用者側で行うことになり、移行時なども利用者側で関連ファイルを漏れなく移行しなければならなくなります。
お礼
むむ。。わからなくなってきました。 でもバックアップや移行時にもメリットがあるのですね。ありがとうございました。
- yambejp
- ベストアンサー率51% (3827/7415)
画像をDBに格納するのはオーバーヘッドが大きいため 無駄だとおもいます。テーブルが肥大するのもそうですが DB上にはバイナリではなく変換してデータがおかれるので、 呼び出しのたびに変換されると効率もわるいでしょう。 ファイル置き場をつくり、適当につけた名前をDBで 管理するのが妥当でしょう。
お礼
なるほど。DBへの格納はデメリットが多いみたいですね。そもそもなぜそんな機能があるのか不思議ですね。ありがとうございました。
お礼
なるほど セキュリティ重視かスピード重視ということですね。ありがとうございました。