KENスクールブログ | パソコン教室・パソコン講座なら個別指導のKENスクール

BLOGKENスクールブログ

  1. KENスクール TOP >
  2. KENスクールブログ > プログラム > データベースに直接画像を保存することの メリット・デメリット

プログラム

データベースに直接画像を保存することの メリット・デメリット

概要

KENスクールにご受講の方から、ご質問としてよくいただくものの中に「MySQL上に直接画像を保存しておくことができないのですか」というものがあります。確かにデータベースと連携し、画像を使用する方法としてよく使われているのは、パスをデータベースに保存する方法だと思います。しかし、MySQL等データベースでは画像をバイナリデータとして保存することでパスを利用せず保存することが可能です。
本記事では、データベース上で直接画像(又動画等の大きなバイナリデータ)を保存することの可否、又代表的なメリット・デメリットを何点かご紹介いたします。

そもそも画像を直接保存することは可能か?

結論から申し上げますと可能です。普段あまり見ないデータ型かもしれませんが、BLOB(Binary Large Object の略)型を使うことになります。このBLOB型は通常データとして格納できない、画像や音声、動画等のバイナリデータをレコード中に直接格納することを可能にするものです。
MySQLにおけBLOBデータ型群は以下になります。

型名 扱える最大長(バイト)
TINYBLOB 255 (28 – 1)
BLOB 65,535 (216 – 1)
MEDIUMBLOB 16,777,215 (224 – 1)
LONGBLOB 4,294,967,295、または4GB (232 – 1)

メリット・デメリット

〇メリット

・セキュリティ性の向上
→パスの形でデータベースへ保存すると、もちろん画像につけた名前やフォルダ名はデータベースに保存されることとなります。流出を防ぎたい重要な画像や音声などセキュアに扱いたいデータの場合、ファイル名等も伏せておきたいこともあるでしょう。バイナリデータで保存することにより、暗号化がなされますので、自然と解析されづらい形で保存することができます。又、データベース上にあるため、画像更新においてもアクセス権の管理ができます。

・画像がトランザクションに含まれる
→通常パスで管理する場合、画像の実ファイルはほとんどの場合サーバー上のパスにあるフォルダ保存で管理することになると思います。その場合、トランザクションが同一にならないため、ファントムファイルの発生を誘発することになります。一方データベース上に保存すると、画像の更新に関してもトランザクション上になりますし、同時にロールバック処理による画像の復元も可能となります。

〇デメリット

・パフォーマンスの低下
→画像等の大きなバイナリデータもひとつのレコードとして扱うこととなりますので、データベースに入出力するデータ量が増加することになります。そのため、バックアップ等にも時間を要するようになってしまいます。

・ストレージの圧迫
→こちらも上と同じで、容量が大きくなることによる弊害です。扱う画像が増えるごとにストレージを圧迫していくことになります。結果的に要件の追加に弱いプログラムとなりますので、将来性を見据えて運用することが重要となります。

・更新処理の複雑化
パスによる保存の場合は、画像を更新する際に保存されたフォルダ内を直接差し替えるだけで更新することが可能です。しかし、BLOB型で扱う場合、データベースへ読み込む処理を別途用意することになりますし、画像更新時にも別途SQLを動かす必要が出てきます。

最後に

画像の扱い方ひとつとっても、考えるべきことがたくさんあります。RDBとしては、パスを保存するほうが適しているかと考えられますが、要件によっては直接保存する方法をとることもあるかもしれません。皆さんもひとつの書き方に固執せず、プログラムを扱う際には、運用を想定してより適切な形を目指すようにしてください。

合わせて読みたい: KENスクールの学習システム

この記事に関連する講座

あらゆるケースでのSQL構文をマスター

詳しくはこちら