2011-06-29 6 views
4

私たちは現在、社内アプリケーションの新しい戦略を作成しています。私たちは現在、同じデータベースに対して直接的に適用される約10〜15のアプリケーションを持っています。これは明らかにあまり良くないので、我々はオプションを評価したい。私の知る限り、我々は選択肢に持って見ることができるよう:単一データベースアーキテクチャに対する複数のアプリケーション

  • データベースを複製し、同期
  • でそれらを持つために、複製などを使用して、データベースと上に10-15アプリケーション間の新しいアプリケーションを作成します。
  • その他?

私は、これについてあなたの意見を聞きたいと思います。私は、第二の選択肢は、キャッシュを実装するための効果的なレイヤーを提供する方法だと考えています。しかし、このレイヤーをどのようにすべてのアプリケーションに公開しますか? webservices/restは今後の道なのでしょうか、それとももっと良い方法がありますか?

答えて

2

私はこれに対する専門用語の答えは「サービス指向アーキテクチャー」だと思います。これは確かにオプション2です。

多くのエキサイティングなデッドエンドを探求する大規模な取り組みですが、基本的にはデータベースやテーブルを考えるのではなく、15のアプリケーションに必要なサービスについて考えてください。共有されるものもあれば、1つのアプリケーションに固有のものもあります。これらのサービスをアプリケーションに公開する方法を見つけてください。しかし、Webサービスの呼び出しは、それと同等の直接的なデータベース呼び出しよりも大幅に遅くなる可能性があるので、「サービス指向アーキテクチャー」を採用しないでください。それは製品仕様ではなく、考え方です。

私の経験上、レプリケーションと同期は非常に脆弱なシステムを作り、脳を傷つける障害モードも考えます。

その他 - あなたは実際にあなたが解決しようとしている特定の問題が何であるかは言いません。そのパフォーマンス - パフォーマンスの問題を解決する最も安価な方法が問題にハードウェアを投げ込んでいる場合。マネージ機能の場合、SOAはこれを手助けすることができますが、しばしばメンテナンスが必要なミックスに追加のインフラストラクチャも導入します。単一の「最良の」ソリューションがないため、アーキテクチャの選択を推進していることが本当に明確であることを確認してください。それはトレードオフです。

2

なぜ10-15のアプリケーションでデータベースを共有する必要があるのか​​分かりませんか?実際にすべてのアプリケーションですべてのテーブルを使用する必要がありますか?

まず、アプリケーションごとに一意のすべてのテーブルを別々のデータベースに移動します。

完了したら、同じデータベースにアクセスする複数のアプリケーションに問題があるかどうかを確認するのは簡単です。通常は、アプリケーションがデータをキャッシュし始めるまでは問題になりません(他のアプリケーションがキャッシュしたデータを更新したかどうかわからないため)。最も典型的な方法は、そのために何らかのメッセージングを使用することです。あなたが公開するオプションを分析

+0

これは古いアプリケーションと新しいアプリケーションの両方が混在しているため、これは複雑です。このデータベースにはすべての顧客データが含まれているため、ユニークなテーブルを抽出する巨大な仕事があり、大部分のテーブルは2つ以上のアプリケーションで共有されます。 メッセージングのアプローチについては絶対に議論されていますが、ほとんどすべてを始めることなくこれを実装する "簡単な"方法はありません。 – femseks

+0

はい、それは巨大な仕事です。あなたが5つまたは10つ以上のアプリケーションを持っているときはどうなると思いますか? – jgauffin

+0

私は2つのデータベースにわたって5つのアプリケーションを維持していました。いくつかはかなり複雑でした。コードに慣れたら、MS Visioを開き、各データベースのすべてのテーブルの図を自動的に作成しました。私は機能によって最も可能な限りテーブルをグループ化し、各グループに色分けされたブロックを配置しました。私はデータベースの理解を深めるだけでなく、使用されていないテーブルも見つけました。また、新しい機能の追加もずっと簡単になりました。 – Raystorm

3

をすべてのアプリケーションが同じデータベースにアクセスする必要がある場合は、データベースを複製し、同期

でそれらを持つために、複製などを使用して、私は複製見つけます同期の問題(期限切れのデータなど)に直面するので、それは悪い決断です。

データベースと10-15のアプリケーションの間に新しいアプリケーションを作成します。

これは実際には可能性が高いです。これらのアプリケーションのすべてをデータベースの実装の詳細に依存させたくない場合(たとえば、あるテーブルの変更がすべてのコードに影響を与える場合)、データベースの "これらの「クライアントアプリケーション」に対して「ビジネス意味のある」操作を提供します。

パフォーマンスの問題に直面している場合は、手動複製の代わりにデータベースをクラスタ化することをお勧めします。

1

言及されていないオプションは、ストアドプロシージャ/トリガなどのロジックの一部を持つことです。いい考えではありません。

私はあなたの2番目のオプションがここでの最良の賭けだと言います。 .NETプラットフォームを使用している場合、WCFは本当に簡単で強力な方法です。

+0

私たちは既にデータベースの多くのロジックに大きな問題を抱えており、これを維持するのが非常に難しくなり、理解しにくい問題がたくさん発生します。データベースの上にレイヤーを追加することで、このロジックの一部をコードに抽出することになります。 – femseks

+0

はい、私はデータベース内のロジックに対して強くアドバイスします。手続き的で扱いにくく、散らばっていて、維持管理が非常に難しいです。データベースを公開するレイヤーは、実際には唯一の現実的なオプションです。 gl –

関連する問題