Help us understand the problem. What is going on with this article?

11章 Phantom Files(幻のファイル)

More than 5 years have passed since last update.

11.1 目的:画像をはじめとする大容量メディアファイルを格納する

11.2 アンチパターン:物理ファイルの使用を必須と思い込む

画像のデータを保存する時、どのように保存するか
* 画像のバイナリデータとしてBLOB型でDBに保存する?
* 画像をファイルシステムにファイルとして格納し、ファイルパスをVARCHAR型でDBに保存する?
筆者はバイナリ派。外部ファイルは大きなリスクを伴うので

11.2.1 ファイルの削除時における問題

  • DBで画像へのパスを含む行を削除しても、その指定先のファイルは自動で削除されない
  • 行削除と同時に指定先のファイルも消さないといけない

11.2.2 トランザクション分離の問題

  • DBのコミットとファイルの参照できる、できないは別のタイミングで変わる
  • 現実的にそれほど問題にならない

11.2.3 ロールバック時における問題

  • DELETE文をrollbackしようとしてもファイルを削除してしまっていれば元に戻せない

11.2.4 データベースのバックアップツール使用時における問題

  • DBのバックアップを支援するクライアントツールとの連携
  • ファイルのパスとは別に外部ファイルのバックアップも取る必要がある
  • DB外部ファイルの同期はどうするのか

11.2.5 SQLアクセス権限使用時における問題

  • 外部ファイルにはGRANTやREVOKEなど、SQLステートメントで割り当てるアクセス権限が適用できない
  • DBで文字列で指定された外部ファイルのアクセス権までは管理できない

11.2.6 ファイルはSQLデータ型ではない

  • 格納されたパスの文字列が正当であるとを、DBはを検証しない
  • DBは指定されたパスにファイルが存在すること検証できない
  • ファイル名が変更されたり、ファイルの移動削除が行われてもDBの文字列は自動で更新されない
  • 文字列をパス名として扱うのはアプリケーションが保証することになる

11.3 アンチパターンの見つけ方

まあいいや。。。

11.4 アンチパターンを用いても良い場合

  • データベースの容量を減らせる
  • データベースのバックアップが短時間で終了し、かつバックアップファイルの容量も抑えられる
  • 画像がデータベース外にあれば、プレビューの編集が容易になる

で、結局どうなんでしょう

みんなで議論しましょう

kzhr
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした