2008-09-15 7 views
1

私は、ユーザーがPDFまたはMicrosoft PowerPointドキュメントを 'アップロード'できるようにするアプリケーションの機能を実装しようとしています。このドキュメントは、アプリケーションがビューア内の他のユーザーに利用できるようにします(つまり、それを「Save as ..」の意味でダウンロードしてください)。Oracle 10gを使用してバイナリファイルを保存および取得する最も良い方法は何ですか?

私はすでにデータベース列の任意のバイナリ情報を保存して取得する方法を知っていますが、これはアプリケーションのよく使用される機能であるため、ソリューションが非常に大きなデータベーステーブルにつながる恐れがありますPowerPointドキュメントにビデオを挿入したい)。

Oracleには「ディレクトリ」オブジェクトを作成する方法がありますが、この機能を使用してデータベースサーバの別の場所に保存されたバイナリファイルを格納および取得する方法はありますか?

データベースのサイズについて過度に不安定になっていますか?

(完全を期すため、当社のアプリケーションは、Oracle 10gへCoreLab/DevArt OraDirect.Net driversを使用しての.NET WinFormsのである)あなたの助けを

ありがとう:O)オプションの

答えて

5

カップル:あなたがして、独自の表領域にBLOB列を入れることができますそれ自身の記憶特性。 BLOBを独自のテーブルに格納し、別のテーブルにIDカラムでリンクすることができます。どちらの場合も、列をBFILEとして定義することができます。これは、実際のファイルがディレクトリのデータベースから外部に格納されることを意味します。 BFILE LOBはトランザクションに参加せず、データベースの他の部分ではリカバリできません。

これは、すべて私はそれはあなたが非常に大きなものを考える依存推測23ページ

1

に開始すると、Oracle 10gR2のSQLリファレンス、第2章で議論されています。

実際にはユースケースに依存します。ドキュメントがまれにしかアクセスされていない場合は、データベースに入れることは問題ありません(データベースなどの「無料」バックアップを取得する利点があります)。

これらは何度もヒットしようとしているファイルがある場合は、ディスク上で直接それらを置くだけの場所を格納するのに良いかもしれない、あるいは(その本当に高帯域幅があれば)MogileFS

のようなものに見えます

誰もあなたにこれに対してYesまたはNoの回答を与えることはできません。

1

通常のLOB列型を使用し、そのフィールドの記憶域パラメータを設定して、別個の表領域に置くことができます。膨大な量のデータを処理できるテーブルスペースを作成し、影響を最小限に抑えます。

ディスク使用量については、非常にスーパー・パラノイドであるため、テーブル・スペースを追加して圧縮することもできます。線に沿って何か:

CREATE TABLESPACE binary_data1 DATAFILE some_san_location DEFAULTのCOMPRESS STORAGE(...)私の経験で

1

は、添付ファイルのファイル名を含む単純なVARCHAR2のフィールドがあり、より良いと簡単なソリューション。ファイルシステムのサイズは、データベースサイズよりも管理がはるかに容易です。

1

データは、DBの内部であろうと、(サーバー)アクセス可能なファイルパスへのリンクを保存するだけであろうと、どこかで生きていなければなりません。

これまでは単純なLOBフィールドを使用していましたが、正常に動作していたようです。 DB内のデータを少なくとも保持しておくと、バックアップの面倒を低く抑えることができます。バックアップするデータはたくさんあるかもしれませんが、復元するとすべてがそこにあります。バイナリを分割すると、バックアップ対象を慎重に考えていないとDBが破損したり、データが失われたりする可能性があります。

1

リンクを作成するために使用できるリンクまたはIDを格納する理由の1つは、通常はOracle DBに使用するストレージがかなり高価であることです。大容量のファイルがたくさんある場合は、通常は安価なディスクアレイに配置する方がコスト効率に優れています。

関連する問題