ファントムファイル

15

Click here to load reader

Transcript of ファントムファイル

Page 1: ファントムファイル

ファントムファイルakuraru

Page 2: ファントムファイル

概要

• 目的:大容量ファイルの保存 • AP:物理ファイルが必須と思い込む • 禁止ではない • 解決:DBに格納することを検討する

Page 3: ファントムファイル

目的

• 大容量メディアを格納する • アプリケーションはエンティティと関連したメディアを取得することは必須

Page 4: ファントムファイル

AP:物理ファイルだが必須だと思い込む

• DBにはファイルパスを保存する

DB ファイルシステム

LOB(実体)LOB(実体)

ファイルパスを保存

Page 5: ファントムファイル

問題• DBとファイルシステムの連携がうまくできない。

!

• DBはすべてのデータがDB内に保存される前提で設計されている

• DBの外との関連は人ががんばる

Page 6: ファントムファイル

ファイルの削除

• 参照を削除するだけなので実体は削除されない

DB ファイルシステム

LOB(実体)LOB(実体)

削除しても消えない

Page 7: ファントムファイル

トランザクション分離

• 先にファイルを消すとその時点でアクセスできなくなる(ファイルが欠ける) • 別のユーザーがアクセスしたら矛盾したことになる

DB ファイルシステム

LOB(実体)ファイルパスを保存

Page 8: ファントムファイル

ロールバック

• ロールバックしてもファイルは削除されたまま

• ファイルも元に戻す必要がある

Page 9: ファントムファイル

バックアップツールの使用

• バックアップが同時に行われないと中途半端な変更や矛盾が発生する

• 復元も同じ組み合わせを使わなくてはならない

Page 10: ファントムファイル

アクセス権限• ファイルの権限とDBの権限が異なる

型がない• 型による整合性が保証できない

Page 11: ファントムファイル

アンチパターンの利点

• DBの容量の低減 • バックアップの高速化 • ファイルを一括で編集できる

Page 12: ファントムファイル

解決:BLOBも検討する• ファイルパスのデメリットがない • 矛盾が生じない • DB内で完結している • バックアップが単純 • アクセス権限に矛盾がない

Page 13: ファントムファイル

まとめ

• 状況に応じて使い分ける

Page 14: ファントムファイル

BLOB

• バイナリー・ラージ・オブジェクト

MySQL Oracle Postgre SQL名前 LONGBLOB BLOB BLOB

サイズ(B) 2^32 128T(2^37) 2^32

Page 15: ファントムファイル

LOBロケータ

• Oraclaにはある

• DB内でファイルパスをしているっぽい • 説明できる人がいたらお願いします