[解決済み] SQL ServerでPDFファイルをバイナリオブジェクトとして保存すること、イエスかノーか?
質問
次のようなタスクで設計上の決定を見つけなければならない。
私は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、そしてお勧めは何でしょうか?おそらく、同じようなタスクを経験した人がいて、その経験について報告できるかもしれません。
ご返信ありがとうございました。
<ブロッククオート関連する
どのように解決するのですか?
SQL Server 2008では、ほとんどが1MB以上のドキュメントである場合、FILESTREAM機能が推奨されるでしょう。これは、Microsoft Researchが発表した「FILESTREAM」という論文に基づいています。 BLOBにするかしないか この本は、データベースにブロブを保存することの長所と短所を詳細に分析しており、大変読み応えがあります。
平均256K以下のドキュメントは
VARBINARY(MAX)
列が最適と思われます。
その中間のものは、本当にピンキリなんです。
100K程度のPDF文書が多いとのことですが、これらはSQL Serverのテーブルに非常にうまく格納できますので、問題はありません。1つは、メインのファクトテーブルにリンクされた、ドキュメント用の別のテーブルを持つことを検討するとよいでしょう。そうすれば、ファクトテーブルの利用が速くなり、ドキュメントが他のデータの邪魔になることもありません。
関連
-
[解決済み] WebForm_PostBackOptions のドキュメント [終了しました]。
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL ServerにおけるLEFT JOINとLEFT OUTER JOINの比較
-
[解決済み] SQL Serverでレコードを削除した後、IDシードをリセットする。
-
[解決済み] SQL Server における DateTime2 と DateTime の比較
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み】SQL Server 2008 Expressで、同じサーバー上のSQL Serverデータベースをクローンするにはどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] aspnet:MaxHttpCollectionKeys の最大値。
-
[解決済み] .Net Framework: w3wp.exe で例外が発生しました。
-
[解決済み] 偽造防止用トークンは、別のクレームベースのユーザーのためのものだった
-
[解決済み] エンティティフレームワーク defaultconnectionfactory
-
[解決済み] ウェブサイトを展開します。500 - 内部サーバー エラー
-
[解決済み] jquery の post 呼び出しから asp.net ページに html マークアップを送信する際に、潜在的に危険な Request.QueryString 値がクライアントから検出されました。
-
[解決済み] .ashxページの呼び出しによるファイルのダウンロード
-
asp.netのPostとGetデータの取得方法
-
[解決済み] jQuery UI " $("#datepicker").datepicker is not a function".
-
[解決済み】ASP.NETとASP.NET MVCの違いは何ですか?