2010-12-17 10 views
0

私は最近開発したシステムを持っています。これは、SQLサーバーデータベースを介したWebアプリケーションです。 SQLサーバーデータベースは、「マルチテナント」データベースに設定されており、当社Webサイトのさまざまな「インストール」が同じデータベースにアクセスしています。他のデータベースからのデータへのアクセス - システムアーキテクチャ

類似の行に沿って実行される別のアプリケーションがありますが、主な違いは、それぞれ独自の個別データベースにアクセスするさまざまな「インストール」があることです。

これらのWebサイトはすべて同じサーバー上で実行され、すべてのデータベースは同じSQLサーバーインスタンスに存在します。

それぞれのクライアントはこれらのシステムのいずれかを持っており、この時点までにこれらの2つのシステム間のかなり軽い統合が行われています。これはWebサービスコールによって処理されています。

マルチテナントシステムからデータのリストを返すようになりましたが、他のシステムのデータベースに格納された基準に基づいてフィルタリングする必要があります。このアイデアを好きではない、それはデータのリストを取得し、呼び出しを行う手段として、 -

  1. Webサービス再び:誰もが任意の鮮やかなアイデアを持っていた場合、私はこれを行うための方法をいくつか見ることができますが、思っていました遅くて醜い個々のアイテムごとに

  2. データベースレイヤー内にダイナミックSQLを書き込むことで、.dbo.tableのジョインを行うことができます。これは少し醜いもので、メンテナンスが難しい場合もあります。

  3. あるデータベースから別のデータベースにデータをレプリケートします。これが私が向かうところですが、データが同期しなくなる危険性があります。

私は、マルチテナントデータベース内のビューについての巧妙な何かをしたいのですが、私は、我々は第二のシステムのための新しいデータベースを作成するたびにビューの別々のセットを作成する必要がありますする必要はありません

...

答えて

1

ビジネスサイズによっては、#1または#2となります。

#1は、より多くのスケーラビであり、ヘテロジェナスクライアントには適していますが、実装と保守は難しいです。あなたは公開APIを持っていないので、#2に行くことができます。

#2はredundacyが起こると、それは後で解決するのは難しいので、専門家のDBAと非常にエラーが発生しやすい

#3はIMO最悪の解決策である必要があります。

私が示唆しているのは、短期計画と長期計画です。短期的には#1または#2を使用し、同時にデータベースを再設計してください。次に、新しいデータモデルをシステムに追加することができ、既存のdbaseと共存させることができます。あなたがそれを保証している場合、機能は新しいデータベースに切り替わりますが、まだlgacyシステムのままです。そして最後に、新しいデータベースが問題なくしばらくして、回路からレガシーデータベースを終了します。

0

データモデルを変更しないでください。それは危険です。その上に別の抽象ラッパーを作成するだけです。

別のサーバーにデータベースをレプリケートし、この新しいラッパーがデータのコピーで動作するようにすることができます。 データが破損した場合は、単にメインコピーに復元してください。

関連する問題