ファントムファイル
Click here to load reader
Transcript of ファントムファイル
ファントムファイルakuraru
概要
• 目的:大容量ファイルの保存 • AP:物理ファイルが必須と思い込む • 禁止ではない • 解決:DBに格納することを検討する
目的
• 大容量メディアを格納する • アプリケーションはエンティティと関連したメディアを取得することは必須
AP:物理ファイルだが必須だと思い込む
• DBにはファイルパスを保存する
DB ファイルシステム
LOB(実体)LOB(実体)
ファイルパスを保存
問題• DBとファイルシステムの連携がうまくできない。
!
• DBはすべてのデータがDB内に保存される前提で設計されている
• DBの外との関連は人ががんばる
ファイルの削除
• 参照を削除するだけなので実体は削除されない
DB ファイルシステム
LOB(実体)LOB(実体)
削除しても消えない
トランザクション分離
• 先にファイルを消すとその時点でアクセスできなくなる(ファイルが欠ける) • 別のユーザーがアクセスしたら矛盾したことになる
DB ファイルシステム
LOB(実体)ファイルパスを保存
ロールバック
• ロールバックしてもファイルは削除されたまま
• ファイルも元に戻す必要がある
バックアップツールの使用
• バックアップが同時に行われないと中途半端な変更や矛盾が発生する
• 復元も同じ組み合わせを使わなくてはならない
アクセス権限• ファイルの権限とDBの権限が異なる
型がない• 型による整合性が保証できない
アンチパターンの利点
• DBの容量の低減 • バックアップの高速化 • ファイルを一括で編集できる
解決:BLOBも検討する• ファイルパスのデメリットがない • 矛盾が生じない • DB内で完結している • バックアップが単純 • アクセス権限に矛盾がない
まとめ
• 状況に応じて使い分ける
BLOB
• バイナリー・ラージ・オブジェクト
MySQL Oracle Postgre SQL名前 LONGBLOB BLOB BLOB
サイズ(B) 2^32 128T(2^37) 2^32
LOBロケータ
• Oraclaにはある
• DB内でファイルパスをしているっぽい • 説明できる人がいたらお願いします