2009-07-31 8 views
3

"Image"という列形式のSQL Server 2005データベーステーブルに文書を格納します。20 MegファイルをSQL Server 2005 IMAGE列に保存する最も効率的な方法

1メガバイトを超えるPDFファイルを保存しようとするたびに、何とか壊れてしまいます。

.NETに大きなファイル(〜10megs)をデータベースにシリアライズして保存するのに特に効果的な方法はありますか?

[編集] マイクロソフトは実際には最大ファイルサイズは約2Gです。 0から2までの可変長バイナリデータ^ 31-1(2,147,483,647)バイトです。 http://msdn.microsoft.com/en-us/library/ms187993.aspx

+1

腐敗には、データベースに入れて取得する方法と関係がありますか? –

+2

ファイルの保存と取得に使用するコードを表示してください。また、腐敗がどのようになっているのかを教えてください。ファイルではなくテストデータを使用して破損を再現できますか:20MBのゼロを格納する場合、20MBのゼロを取り出せますか? –

+0

面白いことに私のユニットテストはまだ合格です。 ファイルをシリアル化し、内容のサイズ(バイト長)を取得し、ファイルを取得してバイトを比較して、それらが同じであることを確認します。しかし、取得したファイルを表示しようとすると、破損しています。 ...これは大きなファイルに対してのみ起こります。 –

答えて

2

迅速な解決を保存することができるものですこの時点でDBのデータに圧縮を使用することです:

http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx

私はSQL Serverがファイルの破損が、GZIPアルゴリズムで動作していることはあなたのFを助けるかもしれないことを疑いますバグを招く。

+1

いくつかのファイルタイプ(ex、PDF)はあまり圧縮しません。5%-10% – Jim

8

ファイルシステムにファイルを格納し、ファイルへの参照をデータベースに格納する方が理にかなっていませんか?データベースに20MBのファイルを保存すると、パフォーマンスの問題が発生する可能性があります。

+1

http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay/3772 –

+0

私はこのプロジェクトを継承しており、常にドキュメントをデータベースに格納しています。 –

+0

列をBLOBに変換できますか?私のSQLサーバーは錆びていますが、上記のように、イメージ列ではなくバイナリオブジェクトを使用することによって、varbinaryの制限が克服される可能性があります。 – andrewWinn

3

文書中心のアプローチに従い、pdfや画像などの文書をデータベースに保存しないと、データベースであらゆる種類のパフォーマンスの問題が発生すると、最終的にはそれをリファクタリングする必要があります。ファイルシステムにファイルを保存し、パスをデータベースのテーブルの中に入れてください。

ただし、既にこの問題を扱っている可能性がありますので、この記事をご覧ください。

http://chiragrdarji.wordpress.com/2007/08/31/storing-and-retrieving-docpdfxls-files-in-sql-server/

それはvarbinararyの最大制限が31バイトに2を上げていることを説明し、あなたが出てドキュメントをリファクタリングしたくない場合は、SQL Serverの中で、2005年

+0

それはほぼ2GBです。保存したいのは約10MBです。 –

2

SQL Server 2005で大きなバイナリデータにVARBINARY(Max)を使用するべきではありませんか?

+0

はい、IMAGEタイプはまもなく廃止されます - SQL Server 2008 R2はおそらくそれをサポートしませんもう代わりに 'VARBINARY(MAX)'を使用してください! –

関連する問題