データはファイルシステムに、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使うくらいなら、テキストファイルのがマシです。

Windows 10 TP でエンコしてみた。

一般的レビューは他所様がやってますし、今更ってカンジなので。。。
ここはちょっと特色を出して、簡単ですがエンコひととおりやってみました。

    • tsMuxeR GUI

01_tsMuxeR

02_tsMuxeR
普通ですね。

  • AviUtl (ver 1.0)

03_AviUtl
L-SMASH Works File Reader

04_AviUtl
読めました!

05_AviUtl
拡張 x264

06_AviUtl
エンコ中…

    • Nero AAC Excoder

07_NeroAAC
音声もフツーに…

    • MP4Box

08_Mp4Box

この程度ですが、何も問題なく終わっちゃいました。
あと気になるのは、AVSですかね。。。

記憶域スペースのHDD交換

現象

  • 記憶域プールの仮想ドライブから、とあるファイルを読み出そうとすると固まる。
  • 作業中のものだけでなく、すべての仮想ドライブへのアクセスが固まる。
  • コピー(移動)処理をキャンセルすれば回復する。ただし、キャンセルにもしばらく時間がかかる。
  • タスクマネージャの読み書きは0KB/秒のままだが、アクティブな時間はずっと100%になっている。
  • 記憶域の管理コンソールにエラー情報は上がってない。

調査

  • ますはイベントログ見てみましょ。こんなエラーが大量に記録されてました。
    storagepool01
    全部”ディスク 14”みたいです。
  • 該当ディスクをさがすわけですが、、、
    storagepool02
    ここには居ないみたい。まぁ、記憶域プールの仮想ドライブが問題起こしてるわけですし。
  • つまり、記憶域プールを構成する物理ディスクってことですが、、、
    storagepool03
    14どれでしょう?区別がつきません。やっぱりエラーにもなってませんねぇ。
  • では、もっと細かくPowerShellのCmdletから見てみましょう。
    storagepool04
    storagepool05
    コイツが怪しい?
    ディスク 14 の”14″ってのはDeviceIdなんだろうか?ここはウラ取ってません。どっかに情報あります?

処置

  • 怪しい物理ディスクをプールから外して、関連する仮想ドライブを修復します。
    storagepool06
    storagepool07
    20TBの全修復って何日かかるんでしょう??
  • 3日くらいかかりましたが、修復完了。
    storagepool11
  • あとは、ここから削除して、物理ディスクを取り外して終了。

その後、問題のあったファイルの読み取りも異常なく行えるようになり、イベントログの警告も発生していません。