Oracle 10g でバイナリ ファイルを保存および取得する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/62876

  •  09-06-2019
  •  | 
  •  

質問

ユーザーが PDF または Microsoft PowerPoint ドキュメントを「アップロード」できる機能をアプリケーションに実装しようとしています。これにより、アプリケーションはビューアで他のユーザーがそのドキュメントを利用できるようになります (そのため、ユーザーは「ダウンロード」できなくなります) 「名前を付けて保存」の意味です)。

データベース列に任意のバイナリ情報を保存および取得する方法はすでに知っていますが、これはアプリケーションでよく使用される機能になるため、このソリューションではデータベース テーブルが非常に大きくなるのではないかと心配しています (顧客の 1 人がPowerPoint ドキュメント内のビデオ)。

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

それとも、私はデータベースのサイズについて過度に神経質になっているのでしょうか?

(完全を期すために、私たちのアプリケーションは .Net WinForms を使用しています CoreLab / DevArt OraDirect.Net ドライバー Oracle 10g へ)

役に立ちましたか?

解決

いくつかのオプション:独自の記憶特性を持つ独自の表領域に BLOB 列を配置できます。BLOB を独自のテーブルに格納し、ID 列によって他のテーブルにリンクすることができます。どちらの場合も、あなたが提案したように、列を BFILE として定義できます。これは、実際のファイルがデータベースの外部のディレクトリに保存されることを意味します。ここで懸念されるのは、BFILE LOB がトランザクションに参加せず、データベースの残りの部分を使用してリカバリできないことです。

これについては、『Oracle 10gR2 SQL リファレンス』の第 2 章、23 ページ以降ですべて説明されています。

他のヒント

それは何を巨大だと考えるかによると思います。

それは実際にはユースケースによって異なります。文書がめったにアクセスされない場合は、文書をデータベースに保存しても問題ありません (たとえば、データベースを使用して「無料」バックアップを取得できるという利点があります)。

これらのファイルが何度もアクセスされる可能性がある場合は、ファイルをディスクに直接配置して場所を保存するか、(帯域幅が非常に高い場合は) 次のような方法を検討する方が良いかもしれません。 モージャイルFS

これに対して「はい」か「いいえ」で答えられる人は誰もいません。

通常の LOB 列タイプを使用し、そのフィールドが別の表領域に配置されるようにそのフィールドの記憶域パラメーターを設定できます。大量のデータが投げ込まれても処理できる場所にテーブルスペースを作成すれば、影響を最小限に抑えることができます。

ディスク使用量について非常に偏執的になりたい場合は、テーブルスペースにそのようにマークを付けてさらに圧縮することもできます。次のようなもの:

TableSpace binary_data1 datafile some_san_locationデフォルトのコンプレッドストレージ(...)を作成する

私の経験では、添付ファイルのファイル名を含む単純な VARCHAR2 フィールドを使用する方が、より適切で簡単な解決策です。ファイル システムのサイズは、データベースのサイズよりも管理がはるかに簡単です。

データはどこかに存在する必要があります。DB の内部であっても、(サーバー) アクセス可能なファイル パスへのリンクを保存するだけであっても、スペースを消費することになります。

過去に単純な LOB フィールドを使用したことがありますが、問題なく動作しているようでした。少なくとも DB 内にデータを保持しておけば、バックアップの手間が軽減されます。バックアップするデータが大量にあるかもしれませんが、復元すると、すべてがそこに存在します。バイナリを分割するということは、バックアップ内容に注意しないと DB が壊れたり、データが失われたりする可能性があることを意味します。

リンクの構築に使用できるリンクまたは ID を保存する理由の 1 つは、Oracle DB に通常使用するストレージがかなり高価であるためです。大きなファイルが多数ある場合は、通常、それらを安価なディスク アレイに配置する方がはるかにコスト効率が高くなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top