SlideShare a Scribd company logo
1 of 15
Download to read offline
ファントムファイル
akuraru
概要
• 目的:大容量ファイルの保存	

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

• 禁止ではない	

• 解決:DBに格納することを検討する
目的
• 大容量メディアを格納する	

• アプリケーションはエンティティと関
連したメディアを取得することは必須
AP:物理ファイルだが必須だと思い込む

• DBにはファイルパスを保存する
LOB(実体)
LOB(実体)
ファイルパスを保存
DB

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

!

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


• DBの外との関連は人ががんばる
ファイルの削除

• 参照を削除するだけなので実体は削除されない
削除しても消えない
LOB(実体)
LOB(実体)

DB

ファイルシステム
トランザクション分離
• 先にファイルを消すとその時点でアクセスできなくなる(ファイルが欠ける)	

• 別のユーザーがアクセスしたら矛盾したことになる

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

ファイルシステム
ロールバック

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


• ファイルも元に戻す必要がある
バックアップツールの使用

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


• 復元も同じ組み合わせを使わなくては
ならない
アクセス権限
• ファイルの権限とDBの権限が異なる

型がない
• 型による整合性が保証できない
アンチパターンの利点
• DBの容量の低減	

• バックアップの高速化	

• ファイルを一括で編集できる
解決:BLOBも検討する
• ファイルパスのデメリットがない	

• 矛盾が生じない	

• DB内で完結している	

• バックアップが単純	

• アクセス権限に矛盾がない
まとめ

• 状況に応じて使い分ける
BLOB
• バイナリー・ラージ・オブジェクト
MySQL
名前
サイズ(B)

Oracle

Postgre SQL

LONGBLOB
2^32

BLOB
128T(2^37)

BLOB
2^32
LOBロケータ
• Oraclaにはある	

• DB内でファイルパスをしているっぽい	

• 説明できる人がいたらお願いします

More Related Content

More from Akura Pi

TableViewAgent
TableViewAgentTableViewAgent
TableViewAgent
Akura Pi
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
Akura Pi
 
Ns user defaults
Ns user defaultsNs user defaults
Ns user defaults
Akura Pi
 
Storyboard
StoryboardStoryboard
Storyboard
Akura Pi
 
Mvcのすすめ
MvcのすすめMvcのすすめ
Mvcのすすめ
Akura Pi
 
Groovy base
Groovy baseGroovy base
Groovy base
Akura Pi
 

More from Akura Pi (7)

TableViewAgent
TableViewAgentTableViewAgent
TableViewAgent
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
 
Ns user defaults
Ns user defaultsNs user defaults
Ns user defaults
 
Currying
CurryingCurrying
Currying
 
Storyboard
StoryboardStoryboard
Storyboard
 
Mvcのすすめ
MvcのすすめMvcのすすめ
Mvcのすすめ
 
Groovy base
Groovy baseGroovy base
Groovy base
 

ファントムファイル