• ベストアンサー

DBにデータファイルを格納するメリット

お世話になります。 勉強がてら携帯向けにPHP+MySQLで画像(Flash含)や動画配信するサイトを構築しています。 画像はデータベースに格納するか、ハードディスクから読み込むか迷っています。 イマイチそれぞれのメリットデメリット、また制限事項などを理解できていないのですが、その辺りをどなたかわかりやすくご教授いただけませんでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • vsba23895
  • ベストアンサー率58% (18/31)
回答No.3

2番の方の御回答に付け加えると、メリットに、セキュリティの向上も上げられるでしょうか。 DBサーバは、www サーバよりはるかにセキュリティが厳重に設定できます。ファイアウォールの中にいて外界から直接アクセスできず、www サーバ(かそのプロキシ)に向けてのみ、しかもDBポートだけ開けておく、という状態で運用されるなら、www サーバのようなアタックも受けないし、万一wwwサーバに侵入されても、DBのコンテンツをごっそり盗まれるまでには、まだ色々とバリケードが立てられます。 一方、www サーバに重要な画像コンテンツを直接置いてしまうと、うっかり下手な symbolic link を作ったり httpd のバグで、それが URL として直接取得できてしまうとか、www サーバに侵入されてしまうとか、色々な危険があります。まあ、CGI の get 引数の規則性からコンテンツが順次たぐれてしまうという設計だと、ファイアウォールも形無しですが。 DBサーバに置くデメリットは、勿論スピードでしょう。DB → www → ユーザとBLOB転送を最低2回することになりますから。

gapp
質問者

お礼

なるほど セキュリティ重視かスピード重視ということですね。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

#1さんの回答に異論があります。 >DB上にはバイナリではなく変換してデータがおかれる これはどういう意味でしょうか? BLOBなど、バイナリのまま大容量のデータを格納するデータ型があり、変換などは行われません。 画像などをDBに格納すれば、他の関連情報と同期を取れたままバックアップや移行が行えるし、SQLで操作が可能です。 別ファイルとして管理すれば、同期を取った管理は、利用者側で行うことになり、移行時なども利用者側で関連ファイルを漏れなく移行しなければならなくなります。

gapp
質問者

お礼

むむ。。わからなくなってきました。 でもバックアップや移行時にもメリットがあるのですね。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

画像をDBに格納するのはオーバーヘッドが大きいため 無駄だとおもいます。テーブルが肥大するのもそうですが DB上にはバイナリではなく変換してデータがおかれるので、 呼び出しのたびに変換されると効率もわるいでしょう。 ファイル置き場をつくり、適当につけた名前をDBで 管理するのが妥当でしょう。

gapp
質問者

お礼

なるほど。DBへの格納はデメリットが多いみたいですね。そもそもなぜそんな機能があるのか不思議ですね。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 画像などの格納方法

    お世話になります。 データベースで画像やPDFなどを扱う場合、そのファイルそのものをデータベースに格納する方法と、ファイル名を格納する方法があると思います。 ファイル名を格納する方法は行ったことがあるのですが、それぞれのメリットデメリットが解りません。あるいはこのよう場合はこちらのほうがよいとかあるのでしょうか。 1つにAccessのようにデータベースのサイズが制限させている場合はファイル実体を入れた場合すぐに制限を超えかねないので注意することぐらいしかわかりません。 よろしくお願いします。

  • DBのハードディスクについて

    Linux、PHP、MySQL構築の商用サーバーで登録用DBサーバーと参照用DBサーバーのあるサーバーでは、DBにデータを格納するハードディスクなど設置するのが普通なのでしょうか。ハードディスクを使う場合商用でよく使うハードディスクの製品名が知りたいのですが何方か知りませんか。

    • ベストアンサー
    • MySQL
  • 日付や日時を格納する場合の型はどうしていますか?

    WEBアプリケーションで データベース(MySQL)を使うのですが、 日付や日時を格納する場合の型は varchar(10)、date、datetime のどれにしていますか? 文字型と日付型か迷っているので、 メリット、デメリットがあれば知りたいです。

    • ベストアンサー
    • MySQL
  • Excel上の競馬データをMySQに格納

    競馬のデータベースを作成してるんですが、 VB6でExcel2002上にあるhttp://keiba.nifty.com/db/race.php?race=200505030410  のような表のデータを MySQL4内に作ってあるテーブルに 格納したいのですが、どうしたらいいんですか? MySQLとVBはADO接続できました。

  • 画像データの取得と格納

    原因がなにかわからず困っています。 アドバイスをください。 やりたいことは -------------------------------------------------- (1)一時保管用のテーブル内から画像データをPHPにて表示。 (2)その後、他のテーブルに画像ファイルを格納。 -------------------------------------------------- (1)は取得できていて表示も可能。 ただ、それをAテーブルに格納すると画像データが壊れているのか×マークで表示され画像が表示できない。 プロパティで表示したときの画像パスから直接画像を表示しても表示できず。 phpMyAdmin上で画像ファイルを差し替えると表示可能。 以上のことからデータの内容が破損と思われる。 Aテーブルに格納する際、$temp_dataのバイナリを取得したものをそのまま放り込んでいますがこれがいけないのでしょうか? バイナリ以外のデータは正常に格納できています。 問題の画像データはJPEGで 取得・格納のデータ型はlongblob型。 mysql 5.0.67 php 5.2.6 Linux RedHat 2.6.9-78.ELsmp 本当に困っています。 よろしくお願いします。

    • 締切済み
    • PHP
  • PostgreSQLとmySQLのメリット、デメリット

    PostgreSQLとmySQL どちらかのデータベースを選びたいのですが 両方使ったことがあるかた それぞれのメリット、デメリットを 教えてください

  • DBの負荷の減増

    PHPとMySQLを使用しWebアプリを作成しています。 どちらのほうがデータベースにとって負荷がないのでしょうか? ・各アプリケーションごとに専用のデータベースを作成しテーブルを作成する。 ・一つのデータベースで、各アプリケーションのテーブルを作成しデータを格納する。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 画像の格納

    mysqlに画像を格納してPHPで表示させようとしてるんですが、うまくいきません。下記のような文字列が延々と表示されます。 ????? JFIF? ?H?H?????C?$;'$!!$I47+;VL[YULS どうしてこうなるのでしょうか?

  • ページ間で画像を表示。mysqlに画像を格納すべき

    ページ間でjpeg(画像)を表示させたい場合、 mysqlでは何のデータが格納されるのでしょうか。 行数は1万ほどで、1枚50KBのjpegを1行あたり0枚~30枚使います。 1)jpegそのものを格納 負荷が大きいので、この方法は避けたいです。 2)jpegのパスを格納 負荷は少なく、PHPのscandir関数(http://shoyu-ramen23.jugem.jp/?eid=90) で枚数によって処理を分けて表示することができる。 3)枚数を格納 php側で枚数によって処理を分けて表示することができますが、 jpegの枚数が減ったときに、格納した枚数を変更しないといけない。 2が一番よさそうと考えているのですが、 phpでmysqlを扱う場合、こういった考え方をするのは間違いでしょうか。 ページから画像をアップロードすることはありません。この場合もmysqlに画像を格納すべきですか。

    • ベストアンサー
    • PHP
  • DBに格納された画像データを縮小して表示したい

    PHP5+MySQL5です。 DB内のBLOBカラムに、Base64エンコードされた画像データが格納されています。 これを、サムネイル用に縮小して表示したいのですが、widthとheightで小さくするのではなく、ファイルサイズも小さくしてブラウザに渡したいと考えています。 (小さくした画像は保存しません) そこで、DBから取得した画像データを「imagecopyresampled」で再サンプリングしつつ小さくしたいと思いましたが、画面には何も表示されませんでした。 以下、ソースを簡潔に記載します。 $db_img = "DBから画像データを取得"; //600x600の画像 $old_img = base64_decode($db_img); $new_img = imagecreatetruecolor(200,200); //200x200のサムネイル画像を作成 $thumbnail = imagecopyresampled($new_img,$db_img,0,0,0,0,200,200,600,600); print $thumbnail; $old_imgの処理が間違っているのだろうと思うのですが、どのように処理すればいいのかわかりませんでした。 この場合、どのように処理すればいいのか教えていただけないでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
このQ&Aのポイント
  • デジカメde!!ムービーシアター7を購入して、使用しています。
  • B'sDVDビデオ3の設定中にフリーズする問題が発生しています。
  • フリーズは名前を付けて保存やタイトルの入力時に起こり、タスクマネージャーで終了するしかありません。アンインストールと再インストールを試しましたが、解決しません。
回答を見る