データはファイルシステムに、DBからパスで参照?

MS Officeドキュメントを永続化する必要のあるシステムがあります。よくあることですね。このお話しでは、画像でも音楽でもいいです。ちょっと大きなバイナリデータと受け止めてもらえればいいです。
DB使いますから、varbinary(max) なColumnが用意されてます。普通ですね。

さて、ここでおかしな話が出てきます。実話なんですけどね…(#^ω^)

「なんでDBだよ? ファイルはディスクに置いて、DBからパス参照するでしょ、普通。」

いやはや、あなたにアーキテクトの才能は無いようです。。。

ここに4つの問題点を指摘します。ファイルをファイルシステムに置きたければ、すべて的確なソリューションを提示してみてください。

  1. 2つ以上のリソースに対して原始性を保障する手法

DB操作とファイルシステム操作において、どのようにトランザクションを成立させますか?
リソースがすべてDBであれば、MSDTCに頼ればいいでしょうが。。。
このケースでは、DBレコードとファイルシステム上のファイルを同時に管理するのは困難を極めます。DBレコードがあってファイルがない、ファイルがあってDBレコードがない、DBレコードは最新なのにファイルは古い、、、まだ続けますか?

  1. データの破損耐性

メモリ故障によってディスクに書き込まれるデータが壊れるのは有名なお話ですね。DBMSにはデータ保護や破壊検出機構が備わっており、PAGE_VERIFY もデフォルトで CHECKSUM です。
ファイル保存時のハッシュ取得とそれを保持する仕組み、ファイル読み取り時のハッシュ照合処理を自前で実装したいですか?

  1. バックアップ管理

当然、DBはバックアップ運用されます。メンテナンスプランをしっかり設計して任せておけばいいですね。ではそのファイル全部、どうやってバックアップの管理をするんでしょうか? ファイルの完全/差分バックアップはXCOPYでも使いましょうかw さて、トランザクションログと同期できる粒度の世代管理はどうしましょう?

  1. 大量のファイル

DBは大量数のデータを管理することも重要な役割です。非常に効率よくデータを管理してくれる事など、言うまでもありません。では、フォルダ内に溜まったそのトンデモナイ数のファイルはどうしてくれるんです? 作業中にExplorerで開いちゃったりなんかしてw

どうでしょう、すべてに対処法がないわけではありませんが、こんなクソ面倒くさいコトをやりたいんですか?

ここで言う DBMS は SQL Server のことです。
null と string.Empty の区別か付かないDBとか、知りたくもないです。
国産のDB使うくらいなら、テキストファイルのがマシです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>