1. ホーム
  2. asp.net

[解決済み] SQL ServerでPDFファイルをバイナリオブジェクトとして保存すること、イエスかノーか?

2022-02-16 18:08:49

質問

次のようなタスクで設計上の決定を見つけなければならない。

私はSQL Serverデータベースを持っており、そこには注文のテーブルが含まれています。PDF 文書は、Web ページからの単純なファイルアップロードによってユーザーによってアップロードされ、注文に割り当てられる予定です。1 つの注文に複数の文書が存在することはありません (おそらく文書はなく、複数であることはありません)。この目的のために、ユーザーはウェブページを開き、注文番号を入力し、表示された注文を取得し、アップロードボタンをクリックします。だから、アップロードされたドキュメントがどのオーダーに属するかがわかるのです。

今、私はWebサーバーにドキュメントを保存するための2つのオプションを検討しています。

1) 私の注文のテーブルを varbinary(MAX) カラムで拡張し、そのバイナリフィールドに直接 PDF 文書を格納します。

2) PDF ファイルをディスク上の特定のフォルダに保存し、注文に関連する一意の名前 (たとえば、データベースの主キーである注文番号、または注文テーブルの追加の列に格納できる GUID) を付けます。おそらく、私は1つのフォルダにあまりにも多くの千ファイルを取得することを避けるために、毎月、サブフォルダにファイルを格納し、データベースの注文行にサブフォルダ名を格納する必要があります。

PDFファイルを保存した後、関連する注文番号を入力すると、ブラウザからダウンロードして見ることができる。

私は、関連するすべてのデータを1つのデータベースで管理することが容易であると思われるため、オプション(1)に傾いています。しかし、(2)に比べてデータベースのサイズが大きくなるため、時間の経過とともにパフォーマンスの問題が発生する可能性があるのが少し心配です。データベース全体のサイズの約90%、あるいは95%は、保存されたPDFファイルだけで構成されるでしょう。

以下は補足情報です。

  • PDFファイルのサイズは、それぞれ100キロバイト程度です。
  • 1500件/月程度の受注/PDFファイル数
  • Windows Server 2008 R2 / IIS 7.5
  • SQL Server 2008 SP1 Express
  • ハードウェアについてはよくわかりませんが、QuadCoreプロセッサー1台と4GB RAMを搭載していると思います。
  • アプリケーションはASP.NET Webforms 3.5 SP1で作成されています。

(上記の数値では2年程度でSQL Server Expressエディションの4GB制限に達することは承知しています。しかし、ここではこれを無視して、データベースから古いデータを削除するか、フルライセンスにアップグレードするか、どちらかが考えられるでしょう)

質問ですが、オプションのProとContras、そしてお勧めは何でしょうか?おそらく、同じようなタスクを経験した人がいて、その経験について報告できるかもしれません。

ご返信ありがとうございました。

<ブロッククオート

関連する

画像をDBに保存する - 賛成か反対か?

どのように解決するのですか?

SQL Server 2008では、ほとんどが1MB以上のドキュメントである場合、FILESTREAM機能が推奨されるでしょう。これは、Microsoft Researchが発表した「FILESTREAM」という論文に基づいています。 BLOBにするかしないか この本は、データベースにブロブを保存することの長所と短所を詳細に分析しており、大変読み応えがあります。

平均256K以下のドキュメントは VARBINARY(MAX) 列が最適と思われます。

その中間のものは、本当にピンキリなんです。

100K程度のPDF文書が多いとのことですが、これらはSQL Serverのテーブルに非常にうまく格納できますので、問題はありません。1つは、メインのファクトテーブルにリンクされた、ドキュメント用の別のテーブルを持つことを検討するとよいでしょう。そうすれば、ファクトテーブルの利用が速くなり、ドキュメントが他のデータの邪魔になることもありません。