今の仕事先って、以前から画像などのバイナリデータ(結構大量に扱う)をOracleなどのBLOBカラムに放り込むというやりかたで、画像を扱うシステムを作ってます。で、これについてtwitterなどでちょっと聞くと、「なんでBLOB?」という反応ばかり。自分も正直よく分かっていなくて、「なんでだろね?」というオチのまま今まで来ました。なんで深く考えなかったかというと、自分がそこを決定する場面に居合わせたことがほとんど無かったためです。
実際、何度も画像データを出し入れしつづけた結果、データベースの物理記録領域のフラグメンテーション状況がグチャグチャになって…みたいなこともあったようで、正直あまり良い話を聞いたことが無いのも事実。これって、「なんでそうするの?」という点を誰か考えて設計しているのか?というのが今回の疑問。
自分では答えがすぐに出ないので、色々調べてみることにします。
画像をテキストで保存する
- 画像もDBに格納して管理する −扱いがめんどうなLOB(ラージオブジェクト)は使わない方法も含め/Web屋のネタ帳
- http://neta.ywcafe.net/000774.html
にゃるほどー。BASE64エンコードして文字列化しちゃえという作戦。まぁデータとしては3割増しくらいにはなるけれど、キャッシュもどき処理でそこは工夫という(容量は今時のストレージなら問題無いという前提)。BLOBの欠点としては以下のようなものが挙げられてますね。
- 取り扱いに方言の多いSQLや処理が多い。
- 技術情報が少ない。
- 性能劣化が意外なところから来る。
- バックアップ等でトラブルが出る。
一方でメリットとしては
- データはデータベース、という一元管理の思想を徹底できる。
あれ?そんだけw
他にもあとで探してみます。