編集部が厳選した「いま、みんなに見てほしいまとめ」をイチオシとして紹介しています!グサッと刺さる良質まとめはこちら!

RDBに画像を保存するメリットデメリットをキャッキャウフフしました

RDBに限らず、いろんな方が画像の取り扱いに関して深い知見を披露してくださった 非常に重要な内容なので、まとめさせていただきます
DB RDB MySQL システム管理 プログラミング 運用
3823view 1コメント
3
ログインして広告を非表示にする

teratailのイベントに参加したくて登録したら
答えられそうな内容があったので答えて見たら
すごく盛り上がったのでまとめておきます

まみー @mamy1326
回答してみたのだけど、読み込み(表示)性能向上方法はあると思うのですが、書き込みや保守性可用性運用性考えると、DBに画像を保存するメリットがいまいち想像できなかったです。 teratail.com/questions/81233

親方が反応
シュッと本質を突いてくださる

がる @gallu
@mamy1326 「Webサーバを分散させた時」にどうする? って観点くらいかなぁ。 その辺から、おいちゃんはわりと「localにファイルを置くのを好まない」傾向は、あるかなぁ。
まみー @mamy1326
@gallu そうなんですよねー。rsyncでいいじゃんって場合とそうでない場合ありますし。できれば1箇所にしたい。ひと昔前だと「サブドメ切って別サーバー」って案もあったと思うんですけど、今はどうなんでしょ?
がる @gallu
@mamy1326 「画像の更新者及び更新頻度」による、んだろうなぁ。 なので、その結果としての「画像をDBで)は、選択肢としては「ありえる」って、おいちゃんは考えるかなぁ。
まみー @mamy1326
@gallu 一回入れたならそうそう更新しない、のなら、子テーブルもありなんですかね。僕のコメントに回答くださった方で「電子カルテの付加情報」としてセキュアに扱う画像データがあるというお話が聞けましたし。根拠が倫理的で、先々の設計が妥当ならOK、と言うところなのかなあ、と。

KVSやドキュメントDBの知見がまるでない自分に気づく…
課題があるのは楽しみの一つ!
そしてブリンガーさんの発言を見落としていたことにここで気づく…

†ブリンガー† @bringer1092
@mamy1326 KVS、ドキュメントDBに入れますよね。普通 バックアップの容易さ、一貫性(お金をもらって画像を預かる)、LAMPで組むしかエンジニアができないしか考えられないっすねー。

yokuさんのトランザクションのご利益から話は発展し…

yoku0825 @yoku0825
@mamy1326 アップロードが成功した画像が消えることは許されない、のであれば、トランザクションのご利益があるかもしれません。。
まみー @mamy1326
@yoku0825 なるほど。裏を返すと、Webサーバーで受信し切った後は、Webサーバー側で消えないように実装すればいいし、それは基本的にはWebサーバーもしくはストレージの役割だよね、ってことになるかなって思ってます。やっぱりメリット薄いですねー。
そーだい@初代ALF @soudai1025
@mamy1326 @yoku0825 ファイルアップロードのトランザクション、地味に難しい。
k1LoW @k1LoW
@soudai1025 @mamy1326 @yoku0825 バックアップ対象がデータベースに集約される(オリジナル画像がDBにある安心さ)という視点で実装したことがあります。必要に応じてキャッシュ的に画像を展開配置することでDB側の画像は参照しないとかできますし。DBはSPOFのままですが、Webサーバは画像のことを考えずにスケールとか。
k1LoW @k1LoW
@soudai1025 @mamy1326 @yoku0825 まあ、S3の登場でその役割は終わったわけですが。
そーだい@初代ALF @soudai1025
@k1LoW @mamy1326 @yoku0825 僕は暗号化とセキュリティの観点でDBに入れたことがあります(PostgreSQLの暗号化拡張を使った)入れたの正確には見積書とかのPDFでしたけど。
まみー @mamy1326
@soudai1025 @k1LoW @yoku0825 「特殊な文書」を除けばDB保存する理由は見当たらない、と言うことになるんですかね。S3とnginxがでた時点で、静的ファイルはサブドメ切ってそっちへ、って流れになったかな、と。
k1LoW @k1LoW
@mamy1326 @soudai1025 @yoku0825 Webサーバをイミュータブルにしようとしたときに、Webサーバをユーザがアップロードするデータの保管場所にしたくない=今ならS3が選択肢にある となると、特殊文書だけしか今は思いつかないですね(むしろ暗号化の観点で保存は思いつかなかった
まみー @mamy1326
@k1LoW @soudai1025 @yoku0825 暗号化とセキュリティとなると用途はありそうだな、とは思いました。teratailでコメントくださった方も「暗号化とセキュリティの観点で電子カルテに添付される諸々のスキャン画像」が対象だったとおっしゃってました。 S3がない時代にこの手の問題をどうするかは未考慮だったりします。
そーだい@初代ALF @soudai1025
@mamy1326 @k1LoW @yoku0825 ファイル共有とか共有ストレージとかrsyncとか色々やり方はあるとは思いますが前レス踏まえて大体そんな感じです。まぁs3fsとかも辛いときはつらいですけど。あとPostgreSQLにはラージオブジェクトって便利なやつがある。lets.postgresql.jp/documents/tech…
まみー @mamy1326
@soudai1025 @k1LoW @yoku0825 ラージオブジェクトってMySQLでいうBLOBのことですかね。Barracuda使えば圧縮もできる…けどバッファプールと相談なのかなこれ。近年のPostgreSQLもMySQLも機能的に並んでる印象です!

kamipoさんの記事を紹介してくれるとみたさん

とみたまさひろ💎🐬 @tmtms
@mamy1326 @soudai1025 @k1LoW @yoku0825 ”サイズの大きい可変長カラムをクラスタインデックスから追い出して行のサイズを小さく保てるということは、ページあたりより多くの行を詰め込めるようになるということで、バッファプールにより多くの行を乗せられるようになる" らしいです blog.kamipo.net/entry/2014/12/…

BarracudaとAntelopeの違いを認識する僕

まみー @mamy1326
@tmtms @soudai1025 @k1LoW @yoku0825 ありがとうございます!なるほど公式にもそう書いてありました!今5.7の検証してるんですが、my.cnfの設定、デフォルト値など含め、Barracudaって実際どうなってるの?と言うのを熟読します!
残りを読む(59)

コメント

こばやし 'にらたま' けんいち @Niratama 2017-07-24 08:44:17
画像削除の時もあるから一時的なファントムファイル覚悟で定期的にガベコレすればいいんじゃないかなと思う雑な自分
ログインして広告を非表示にする
ログインして広告を非表示にする