19

バックグラウンド:

ずっと前に実装された社内のドキュメントストレージシステムがあります。何らかの理由で、ドキュメントの保存メカニズムとしてデータベースを使用することが選択されました。

私の質問はこれです:

ドキュメントを保存するためのベストプラクティスは何ですか?選択肢は何ですか?長所と短所は何ですか? 回答はテクノロジーやプラットフォーム固有である必要はありません。より一般的なベストプラクティスの質問です。

私の考え:

データベースはドキュメントの保存を目的としたものではありません。ファイルシステムまたはサードパーティのドキュメント管理システムの方が便利な場合があります。データベースのドキュメントストレージは高価です。操作が遅い。これらの論理的な仮定はありますか?おそらくこれが最善ですが、私の考えでは、より良い選択肢があります。oracle BFILE(NASまたはSAN上のドキュメントへのリンク)はBLOB / CLOBよりも優れているでしょうか?

詳細:

  • ドキュメントにはさまざまな種類があります(pdf、word、xml)
  • 中間層コードは.net2.0/ c#で記述されています
  • ドキュメントは、圧縮されたBLOBのOracle 10gデータベースに保存されます(NASストレージ)
  • ファイルサイズが激怒
  • ドキュメントの数は大幅に増加しており、減速の兆候はありません
  • インサートは通常、ピーク時に1時間あたり数百になります
  • 取得は通常、ピーク時に1時間あたり数千になります
  • NASストレージとSANストレージが利用可能です

更新(以下の質問から):

  • 私のバックグラウンドは開発です
  • データベース内のファイルの横に保存されているファイルに関するメタデータが関連付けられています
4

13 に答える 13

14

私の経験に基づいて、それらをデータベースに保持すると思います。これを行うために、2 つのシステムを移動しました。

データベースに入れるということは、次のことを意味します。

  • 複数のサーバーからでも簡単にアクセスできます
  • 自動的にバックアップされます(それを行うために別のジョブを用意する必要はありません)
  • スペースについて心配する必要はありません (人々は DB がディスクをいっぱいにしないようにしていますが、ドキュメントがどこに保存されているかを監視するのを忘れるかもしれません)
  • 複雑なディレクトリ スキームを用意する必要はありません

データベースからドキュメントがありました。書類が多いと困ります。Linux の通常のディレクトリは 1 ブロックで、通常は 4K です。非常に多くのファイルが含まれていたため、58MBのディレクトリがありました (階層のないフラットなディレクトリでした)。それは多くの間接ブロックを持っていました。削除に1時間以上かかりました。ディレクトリ内のファイル数をカウントするのに数分かかりました。それはひどいものでした。これはext3にあります。

必要なファイルシステムでは:

  • 個別のバックアップ メカニズム (DB バックアップから)
  • 物事を同期させるため(ファイルが存在しないとDBにレコードが存在しないようにするため)
  • ストレージの階層 (上記の問題を回避するため、ディレクトリに何万ものファイルが存在しないようにするため)
  • クラスターが必要な場合に他のサーバーからそれらを表示する方法 (おそらく NFS など)

それは本当に苦痛です。自明ではない数のドキュメントについては、私が見たものに基づいて、ファイル システムに反対することをお勧めします。

于 2009-02-04T17:09:43.637 に答える
11

ドキュメントをファイル システム保存してから、ファイルへのリンクと関連するファイル メタデータをデータベースに保存することを好みます。

これは、他の方法よりも便利で、保守が容易で、安価であることが証明されています。

于 2009-02-04T17:04:30.637 に答える
8

ほとんどのエンタープライズクラスのドキュメント管理システムは、オブジェクトファイルをデータベースに保存しません。できないからといって、そうすべきだという意味ではありませ。スケーラビリティとパフォーマンスが重要であり、大きなドキュメントセットがある場合は、オブジェクトをデータベースに保存する際に非常に注意する必要があります。次のことを考慮してください。

ドキュメントイメージングの場合、2億のTIFFファイルは比較的大きなシステムと見なすことができますが、大規模ではありません。大規模なシステムでは、10億を超えるオブジェクトファイルを使用できます。たとえば、ビットンTIFFあたり20KBの場合、4TBのオブジェクトファイルストレージを使用できます。DBバックアップにはどのくらい時間がかかりますか?クエリにはどのくらい時間がかかりますか?これらのオブジェクトへのアクセス頻度はどれくらいですか?これらのオブジェクトのアクセス頻度が高い場合、ハイエンドDBサーバーがファイルの提供にすべての時間を費やすようにしますか?何百万ものオブジェクトがある場合は、オブジェクトがデータベースに格納されるソリューションをどのように設計するかについて、かなり注意する必要があります。

これらの200MTIFFファイルをPDFファイルに変換するタスクが発生したとします。データベースサーバーがすべてのオブジェクトファイルを変換プロセスに提供し、結果を再保存するために時間を浪費するため、ソリューションを屈服させる準備をしてください。

一例として、Sharepointはオブジェクトをデータベースに保存することで有名です。Sharepointは、スケーラビリティの問題でも有名です。

私の答え:
小さなシステム(100万未満のファイル)の場合、DBにファイルを保存することを検討できます。大規模なシステム(> 1Mファイル)の場合、DBにファイルを保存するのは間違いです。

于 2009-05-13T22:37:39.040 に答える
6

ファイルをデータベース自体に保存することに関する私の最大の懸念は、バックアップのサイズと複雑さ、およびその他のデータベース保守操作を管理することです。

この問題を (少なくとも MS SQL で) 軽減するための 1 つの戦略は、別々のデータベース パーティションを作成し、別のドライブに保存することです。

次に、ファイルに関するメタデータが 1 つのパーティションに配置され、実際の BLOB ファイルが別のパーティションに配置されるように、データ スキーマを分離します。

これらのパーティションは、異なるスケジュールでバックアップすることも、個別に復元することもできます。

于 2009-02-04T17:21:36.450 に答える
5

ドキュメントをデータベースに保存する際の唯一の制限は、技術的なものです。

リレーション データベースは、企業のミッション クリティカルなデータを永続的に保存することを目的としています。もちろん、その機能をどれだけうまく実行できるかは、データベースごと、システムごとに異なります。しかし、理想的には、リレーショナル データベースACIDプロパティは、すべてのエンタープライズ データを格納することを目的としています。ファイル システム、リビジョン コントローラー システム、およびその他のローカル ストア ストレージ システムには、特定の利点があるかもしれませんが、エンタープライズ データ ストレージ用には設計されていません。

保管している文書がエンタープライズ・データとして適格である場合 (それらが企業全体で永続的に使用される場合)、それらをデータベースに保持することは論理的です。データベースへの格納に問題がある場合は、DBA がより良い解決策を見つけることができます。パフォーマンス上の理由からデータベースから移動する必要があるかもしれませんが、ベスト プラクティスの理由からデータベースから移動する必要はないと思います。

もちろん、ドキュメントがエンタープライズ データではない場合、たとえばドキュメントが 1 つのアプリケーションでのみ使用される場合は、ドキュメントをデータベースから移動することも理にかなっています。

于 2009-02-05T04:24:19.360 に答える
3

画像を BLOB としてデータベースに保存したことがありますが、最初にそれらの画像に対してバッチ操作を実行しなければならなかったことを後悔しています。ファイルシステムでそれを行う方がはるかに簡単だったでしょう。また、おっしゃったように、ドキュメントがファイル システム上にある場合は、ドキュメントを取得する方がはるかに高速です。

私の単純な見解: ファイル システムはファイルを格納する必要があり、リレーショナル データベースはリレーショナル データを格納する必要があります。

于 2009-02-04T17:06:21.163 に答える
1

バイナリ ファイルをファイル システムに格納します。格納および取得操作用の ASP.NET アプリケーションを作成します。Web アプリ (ドキュメントのバージョン管理、多層セキュリティなど) に気を配ることができます。これはドキュメント管理業界のコンセンサスだと思います。

「文書数が急激に増えている」ということで、大規模化しているようです。サードパーティのすぐに使えるソリューション ( http://kofax.com/capture/など- 私はこれについて豊富な経験があります!) を調べて、「汚い仕事」を行うことをお勧めします。あなた。または、さらに良いことに、 http: //www.edocumentsolutionsllc.com/ などの SaaS サービスを検討することを検討してください。

:-)

于 2009-02-04T18:00:03.910 に答える
0

ドキュメントをSubversionまたは他のバージョン管理システムに保存することを検討してください。優れたバックアップ、古いバージョンのドキュメントを確認する機能、優れたネットワークアクセスが得られます。「転覆の私の人生」を参照してください。

于 2009-02-04T20:04:08.417 に答える
0

それどころか、いくつかの理由から、データベースに保存することにしました。

  1. よりシンプルなバックアップ戦略
  2. データベースに保存された文書は索引付けして検索できます
  3. ファイルの移動やセキュリティの改ざんを心配する必要はありません
  4. クラッシュが発生した場合に別のサーバーに簡単に移植できます
  5. 政府が x 年前のデータを保存する必要がある場合、データベースを使用してこれを管理する方がはるかに簡単です。

データベースはデータを保存するために作られています。ファイルは単なるデータです。

ファイルシステムにファイルを保存することには利点があると述べましたが、主なものはデータベースのパフォーマンスが向上し、サイズが抑えられることです。SQL Server 2008 では、FileStream を使用して両方の長所を活用できます。詳細については、このホワイトペーパーをお読みください

于 2009-02-04T17:21:29.727 に答える
0

個人的な専門知識: あなたはデータベース管理者ですか、それともプログラマーですか?

セキュリティ: データベースに 1 つの設定、データベースとファイル システムに 2 つの設定。誰かが誤ってファイルを移動/削除する懸念はありますか? 複雑な設定では、管理者はファイルを別のサーバーに移動し、共有またはマッピングを変更することを選択する場合があります。私は知っています、これは決して起こらないでしょう。

新しいデータベースは、この分野で改善されています。

于 2009-02-04T17:48:18.847 に答える
0

ファイルにアクセスして編集および再保存できるようにする場合は、ドキュメントを .doc などのファイルとして保存します。

プルバックして再現できる実際の履歴コピーが必要な場合は、ドキュメントを .pdf や .tiff などのファイルとして保存します。

ファイルに関するすべての情報 (日付、作成者、場所など) をデータベースに保存します。

于 2009-02-04T17:05:51.913 に答える
0

私は常にドキュメントのコア情報とファイル パスをデータベースに保存しますが、ドキュメント自体は保存しません。ドキュメント全体がデータベースにある必要があることはめったにありません。

これにより、これらのドキュメントをより柔軟に使用できます。たとえば、階層化されたバックアップ ストレージと重複排除メカニズムを使用したいですか? Oracle BLOB で試してみてください。

于 2009-02-04T17:06:34.703 に答える
0

ドキュメントをデータベースに保存する唯一の利点は、それらのドキュメントを別の環境に簡単に移動できることです。それとは別に、すでに述べたすべての理由から、私はそれをしません。

于 2009-02-04T17:13:21.023 に答える