質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2252閲覧

画像データをbase64でDB上で管理するデメリットとは

akiyama3284pga

総合スコア186

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2022/11/23 04:44

今後、運用中の業務システム上で顧客の証明写真等を管理する必要性が出て参ります。
そのため、画像データの管理方法について検討しています。

方法としては、

・png, jpgバイナリ をそのままサーバ上で管理し、そのパスをデータベース上で管理する。
・画像を文字列(base64等)としてデータベース上で管理する。

という択があると思います。

自分は、バックアップ性や紛失リスク等を考えると後者の方がいいのではないかと考えています。
この場合データベースだけバックアップすればいいので、サーバインスタンスの移行等も楽に行えそうですし、必要とあればいつでもpng等に変換も可能です。

文字列としてデータベース上で管理する場合のデメリット等を教えて頂けましたら助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2022/11/23 04:49

バイナリをそのままDBに保存するのでなく、Base64に変換するとしているのはなぜですか?
akiyama3284pga

2022/11/23 05:00

ありがとうございます。 ...確かに、その手がありました。 バイナリもそのままデータベースに入れてやればいいだけでした。 ただ、HTML埋め込みする際にbase64だとスムーズなのではないかと思いました。 その上で、 データベース上に画像へのパスではなく、 バイナリ or base64 で保存管理するデメリット等あればお聞きしたいです。 致命的なデメリットがなければ、そのような管理方法で運用したいと思います。
dameo

2022/11/23 05:18

Webの画面に画像を表示する、というだけの処理でもDBアクセスが発生し、負荷がかかるとかでしょうか。 画像サーバに入れていればいつでもDBなどに負荷をかけることなく静的に表示することが可能です。postgresqlの中はよく知らないので想像ですが、データを書き換える量が増えるので、DBのログなどが増える速度が上がり、ログなどを元にロールバックできる時間が減る可能性があります。 画像サーバーならDBとの同期が別途必要だったり、戻せなくなる可能性があるものの、画像以外のデータをロールバックできる可能性が上がるかもしれません。
TakaiY

2022/11/23 05:20

質問への回答は回答欄の方に書いたほうがいいですよ。
dameo

2022/11/23 05:21

事実を元に書いていないただの私見なので、回答はできかねます。
akiyama3284pga

2022/11/23 05:33

ありがとうございます。 管理者には優しいが、データベースには厳しい圧をかけることになるということがわかりました。 また、速度面をそこまで重視するシステムではない関係上、そこは問題ないかと思います。 バックアップに関しましては、日々cronにクラウドにアップさせているため、ロールバックできない点への影響は最小限になる想定であります。 画像を使用する頻度などを考慮しつつ、慎重に検討して参ります。
dameo

2022/11/23 06:41

ロールバックと言っても、私が想定したのはOracleのFlashback Queryみたいなもので、(部分)バックアップを引っ張り出してとかそんな大掛かりなものではありません。詳しくもないし使ったこともないのですが、PostgreSQLにもsnapshotなる機能があるようです。 規模が大きくないのであれば、まずはやってみる、くらいでいいかもしれないです。何はともあれ方針決まって良かったですね。
akiyama3284pga

2022/11/23 09:12

ありがとうございます。 自分は差分バックアップで痛い目を見ているため、毎日全体をバックアップして都度上書きするようにしています...汗 あとは、ディスクアクセス増によりやはりページキャッシュも圧迫すると思うのでメモリ周りのスケールアップも考えておかないといけないと思いました。 おっしゃる通り、まずは障壁は出ることを承知でやってみます。
guest

回答1

0

ベストアンサー

僕はDBに詳しくありませんが、以下の質問&回答がお役にたつのではないかと思います。

https://teratail.com/questions/81233

https://teratail.com/questions/296506

いろいろな考えかたがあるなと思いました。
Base64にする方法もこの中で出てきたりしますが、それだけで容量が3割増になるのは考慮しておくべきかと思います。

回答にあるOracleのサイトはリンクが切れていて参照できませんでした。
ちょっと見てみたいのですが残念です。

投稿2022/11/23 05:14

編集2022/11/23 05:18
TakaiY

総合スコア12765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akiyama3284pga

2022/11/23 05:33

ありがとうございます。 非常に参考になりました。 主に容量の観点を鑑みつつ、検討して参ります。
teamikl

2022/11/23 06:48 編集

Oracle の文書はこれかな 原文: http://www.xor.com.au/papers/why_images_in_database.pdf 和訳(アーカイブ): https://web.archive.org/web/20171206224943/http://otndnld.oracle.co.jp:80/products/database/oracle10g/content_management/pdf/why_images_in_database.pdf 昔はデメリットが大きかったけど、今ではメリットを検討しても良いみたいな内容ですが 製品特有の機能を想定しているので、Oracle データベースの記事という点を加味して読んた方が良さそうです。 → 現在の Oracle Multimedia や SQL/MM規格 他の製品、例えば質問タグにある posqgresql 系の記事 では、(6年以上前) 画像を base64にして保存する方法は、初心者にありがちなミスとして挙げられていたりします。 https://yakst.com/ja/posts/4071
akiyama3284pga

2022/11/24 08:09

ありがとうございます。 貴重な原文のご提示、感謝いたします。 確かに利用者の立場からするとテキスト保存するのは何のメリットも無く、管理者の甘えのように感じております。 しかし、インフラからフロントまで全工程を単独で担当している関係上、できる限り扱いをシンプルにして気を取られたくないという部分もあります。 幸い、ECサイトのような画像を多用するようなシステムではないため、データ量の圧迫もそこまで心配することもないということもあり、ひとまずは文字保存方式で運用してみたいと存じます。 その後明らかにパフォーマンスの低下が見られる場合には、画像データをデータベースから吐き出させて、画像管理に移行することも可能かと思いますので...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問