これは私にとって本当に混乱するトピックです。
BLOBが理解でき、簡単に使用できます。 FILESTREAMとは何か理解できます。データベースに簡単に実装でき、データベースをバックアップして、これらのファイルを格納するために作成されたフォルダーを使用してデータベースを復元できます。このようなことはよく理解できると思います。
私が得ないものは:
データベースにVARBINARY(MAX)列だけを使用して_.PDF
_を挿入することと、この_.PDF
_をFILESTREAMデータベースに格納することの違いは何ですか。 BLOB varbinary(max)を使用すると、_.PDF
_がデータベース内にあることがわかります。 _.PDF
_を物理的に削除した場合でも、varbinary(MAX)列内に格納されている値を使用して復元できますか?
この_.PDF
_ファイルをファイルストリームに挿入すると、フォルダー(ファイルグループ用に作成されたファイル)内に表示されます。100ファイルを挿入すると、ファイルストリームフォルダー内に100ファイルが表示されますが、実行すると_DELETE FROM
_およびデータベースの100行を削除しても、filestreamフォルダーにこれらのファイルが表示されます。なぜこれが起こるのですか?一貫性を保つために、これらのファイルも削除されると思いました。
どちらの場合でも、BLOB VARBINARY(MAX)
またはFILESTREAM内に_.PDF
_ファイルを挿入した後も、元のファイルは必要ですか?データベース内なので、簡単に復旧できます。
例として.PDFを使用しています
私は両方のアプローチを使用して実装できますが、それらがどうなるかはまだはっきりしていません。私にとっては同じですが、1つはデータベースの外部に保存され、もう1つはデータベースの内部に保存されます。
whitepaper に基づき、Paul Randalによって書かれました-
あなたの質問に答える:
(たとえば)データベースにVARBINARY(MAX)列だけを使用して.PDFを挿入することと、この.PDFをFILESTREAMデータベースに格納することの違いは何ですか。 BLOB varbinary(max)を使用すると、.PDFがデータベース内にあることがわかります。 .PDFを物理的に削除した場合でも、varbinary(MAX)列に格納されている値を使用して復元できますか?
PDFをSINGLE_BLOB
としてデータベースに挿入すると、元の.pdf
ファイルは不要になります。後で必要になった場合は、エクスポートできます。
この.PDFファイルをファイルストリームに挿入すると、フォルダー(ファイルグループ用に作成されたもの)内に表示されます。100ファイルを挿入すると、ファイルストリームフォルダー内に100ファイルが表示されますが、DELETE FROMを実行すると、データベース内の100行を削除しても、これらのファイルはfilestreamフォルダーに表示されます。なぜこれが起こるのですか?一貫性を保つために、これらのファイルも削除されると思いました。
File Streamsは ガベージコレクションプロセス を使用して、不要になったファイルをクリーンアップします。システムタスクは定期的に起動し(約10秒程度)、ファイルストリームのガベージコレクションの必要性をチェックします。 「なぜすべてのファイルが収集されないのですか?」を読んでください。
危険:ファイルストリームコンテナーから直接ファイルを削除すると、データベースの破損と見なされ、dbcc checkdbは破損エラーを報告します。これらのファイルはトランザクションの方法でデータベースにリンクされており、ファイルの削除はデータベース内の破損したページと同じです。
-
どちらの場合でも、.PDFファイルをBLOB VARBINARY(MAX)またはFILESTREAM内に挿入した後も、元のファイルが必要ですか?
BLOB Varbinary(max)の場合->元のファイルを削除できます。 Filestreamの場合、filestreamフォルダーからファイルを削除しないでください。元のファイルがfilestreamフォルダーと同じフォルダーにない場合は、削除できます。
参照: