3

質問:

データベース イメージ リポジトリに直接アクセスするアプリケーションを作成するか、ドキュメント リクエストを処理するミドルウェアを作成する必要があります。

バックグラウンド:

現在、約 1,500 万のドキュメント/ドキュメント イメージ (90% 以上の単一ページ、グループ 4 TIFF、残りの PDF、Word、および Excel ドキュメント) を保存するカスタム ドキュメント イメージングおよびワークフロー アプリケーションがあります。イメージ リポジトリは商用のサードパーティ アプリケーションであり、非常に高価であり、率直に言ってオーバーヘッドが大きすぎます。ドキュメント画像を保存および取得するシステムが必要なだけです。

イメージを SQL Server 2005 データベースに直接移動することを検討しています。インデックス情報は非常に限られています - 基本的に 2 つのインデックス フィールドです。これは生命保険証券管理システムなので、証券番号とシステム全体で一意の ID 番号を使用して画像にインデックスを付けます。他にもインデックス値がありますが、それらは画像データとは別に保存および維持されます。これらのインデックス値により、個々の画像を取得するための一意の ID 値を検索できます。

データベース サーバーは、DB ファイルをホストする SAN ドライブを備えたデュアル クアッド コア Windows 2003 ボックスです。現在のイメージ リポジトリのサイズは約 650 GB です。変換後のデータベースのサイズを確認するためのテストは行っていません。データベースの設計について質問しているわけではありません。その点については DBA と協力しています。それが変わったら、私は戻ってきます:-)

交換する現在のシステムは明らかにミドルウェア アプリケーションですが、3 つの Windows サーバーにまたがる非常に重量のあるシステムです。この道を行くとしたら、それは単一のサーバー システムになります。

私の主な関心事はスケーラビリティとパフォーマンスであり、パフォーマンスに重点を置いています。私は約 100 人のユーザーを抱えていますが、今後数年間はおそらく使用量の伸びが鈍化するでしょう。ほとんどのユーザーは主に読み取りユーザーであり、システムにイメージを頻繁に追加することはありません。リポジトリへのイメージのスキャンや追加を処理する部門があります。ドキュメントを (ftp 経由で) 受信し、受信したドキュメントを自動的にリポジトリに挿入するアプリケーションもいくつかあります。完全なインデックス情報、またはユーザーがレビューしてインデックスを作成する「バッチ」として挿入されます。

ドキュメント/画像のほとんど (90% 以上) は非常に小さく、100K 未満、おそらく 50K 未満であるため、SQL 2008 を取得してファイルストリームを使用するよりも、データベース ファイルに画像を保存するのが最も効率的であると考えています。

4

3 に答える 3

4

多くの場合、スケーラビリティとパフォーマンスは、6 か月後に経営陣が戻ってきて、「アプリケーション X の機能 Y の実行速度が許容できないほど遅い。どうすれば高速化できるか?」という意味で、最終的に相互に結び付きます。そして、多くの場合、答えはバックエンド ソリューションをアップグレードすることです。また、バックエンドのアップグレードに関しては、ほとんどの場合、ハードウェアに関してスケールアップするよりもスケールアウトする方が安価になります。

要するに、ユーザー アプリからの着信要求を具体的に処理し、それらを適切な宛先にルーティングするミドルウェア アプリを構築することをお勧めします。これにより、フロントエンド ユーザー アプリがバックエンド ストレージ ソリューションから十分に抽象化されるため、スケーラビリティが問題になった場合、ミドルウェア アプリのみを更新する必要があります。

于 2008-10-25T04:36:26.393 に答える
2

これは簡単です。アプリケーションをインターフェイスに書き込み、何らかのファクトリ メカニズムを使用してそのインターフェイスを提供し、必要に応じてそのインターフェイスを実装します。

インターフェースに満足したら、DB と直接通信しているか、他のコンポーネントと通信しているかにかかわらず、アプリケーションは (ほとんど) 実装から分離されます。

インターフェースの設計を少し先取りしながら、「シンプルで、ここで機能し、今すぐ機能する」実装は、システムを将来的に保証すると同時に、システムを過度に設計する必要がなく、適切なバランスを提供します。

インスタンス化する単純なクラスだけではなく、この時点ではインターフェイスさえ必要ないと主張するのは簡単です。しかし、コントラクトが適切に定義されている場合 (つまり、インターフェイスまたはクラスの署名)、それが変更 (バックエンドの実装のやり直しなど) から保護されます。必要に応じて、後でいつでもクラスをインターフェイスに置き換えることができます。

スケーラビリティに関しては、テストしてください。そうすれば、スケーリングが必要かどうかだけでなく、いつスケーリングする必要があるかもわかります。「100 人のユーザーにはうまく機能しますが、200 人には問題があります。150 人に達したら、バックエンドをもう一度検討する必要があるかもしれませんが、今のところは問題ありません。」

それはデューデリジェンスであり、責任ある設計戦術です。

于 2008-10-25T04:34:20.780 に答える
1

私はgabriel1836に同意します。ただし、追加の利点は、1400 万のドキュメントを独自のシステムから自家製のシステムに一晩で変換するわけではないため、しばらくの間ハイブリッド システムを実行できることです。

また、ドキュメントをデータベースの外に保存することを強くお勧めします。それらをファイル システム (ローカル、SAN、NAS は関係ありません) に保存し、ドキュメントへのポインターをデータベースに保存します。

現在使用している文書管理システムを教えてください。

また、専用システムによって提供されるキャプチャ (スキャンとインポート) を置き換える労力を過小評価しないでください。

于 2008-12-24T21:55:09.273 に答える