私のシステムに保存された各レコードにPDF領収書を添付する必要がある金融システムがあります。
これらの領収書は、コンピューターに接続された適切なデバイスによってスキャンされ、PDFに保存されてデータベースに保存されます。
今日、システムはPDFファイルをvarbinary(max)
として保存しますが、テーブルの行数が原因で、DBのファイルサイズが急速に増加しています。平均ファイルサイズ約1〜2 MBです。
データベースのパフォーマンスを損なうことなくこれらの種類のファイルを保存するための最良の方法は何ですか?
Varbinary(MAX)を使用したデータベースのパフォーマンスのように、パフォーマンスを犠牲にすることはありません。 varbinary(MAX)で検索していません。列にインデックスを付けていません。
この表でいい点は、単一の一貫したバックアップです。欠点は、より大きなバックアップです。
ファイルをクライアントvarbinary(MAX)に配信すると、FILESTEAMまたはファイルシステムよりも効率が低下します。
1-2 mbは比較的小さいです。 200 MB以上の場合は、通常、varbinary(MAX)に格納しないようにします。
テーブルのサイズだけが問題である場合、 [〜#〜] filestream [〜#〜] がおそらく最良の解決策です。これによりデータベースのパフォーマンスが低下することはなく、ファイルはテーブルに格納されません。
FILESTREAMを使用すると、SQL Serverベースのアプリケーションで、ドキュメントや画像などの非構造化データをファイルシステムに格納できます。アプリケーションは、豊富なストリーミングAPIとファイルシステムのパフォーマンスを活用すると同時に、非構造化データと対応する構造化データ間のトランザクションの一貫性を維持できます。
ライセンスの観点からは、FILESTREAMがデータベースサイズとしてカウントされないことはほぼ間違いありません。 10 GBのデータベース制限があるEXPRESSと同様に、FILESTREAMはカウントされません。
もう1つの利点は、PDFでAdobe iFilterを使用してOCRを実行している場合、ドキュメントを全文検索できることです。ただし、FILESTREAMを使用してそれを実行できる場合もあります。
または、ファイルを完全に個別に管理して、SQLにパスのみを保存することもできます。
Documentumやその他の主要なパッケージが使用するのと同じように、データベースにパスとファイル名を保存し、その場所にファイルを配置するのが最善の方法です。
データベースサイズをさらに小さくするには、共通パスのテーブルを1つ用意し、その行の短い主キーまたは候補キーに基づいてファイル名を作成します。パスIDと拡張子を保存するだけで済みます。
財務コンプライアンスルールで整合性や改ざん防止が必要な場合は、コンプライアンスグループまたは法務グループに確認して、データベースにハッシュを保存するか、その場所に公開/秘密鍵の署名を付けるだけで十分かどうかを確認できます。