2016-12-06 9 views
1

私たちは新しいバージョンのWebアプリケーションを開発しています。 複数のクライアント(500以上)があり、各クライアントは独自のデータを持つ独自のデータベースを持っています:ユーザー、製品...複数対単一データベース

新しいバージョンでは、すべてのクライアントはいくつかのデータを共有します。プラットフォームに入る予定ですが、各クライアントは自分のユーザーにしかアクセスできませんが、各クライアントのユーザーにはすべてのユーザーを集中テーブルに入れたいと考えています。

その他の商品、注文などは、各クライアントに帰属します。

各クライアントには、ドメインにインストールされているウェブアプリのコピーがあります。 私たちのアプリは、SQL Serverを使用してASP MVC Entity Framework Code Firstです。

私たちの質問は次のとおりです。

  • オプションA:自分のテーブルを含む、クライアントごとに1つのデータベース(製品、受注...)と、ユーザーや他の一般的なデータを格納するための一つの共通のデータベース。

  • オプションB:すべてが含まれている1つの大きなデータベースで、特定のテーブルにClientIdを追加すると、クライアントはそのデータのみを表示します。

長所と短所:

  • 我々はいくつかのデータベースを持っているオプションAで、我々は、テーブル内の100.000注文を持つことができ、そのデータを取得するのは簡単です。一方、我々はデータベース間の照会と2つのデータコンテキストを扱う必要があります。これは、ほとんどのクエリのユーザーデータを取得するために必要な、データベースとクライアント特有のものと一般的なものの両方へのアクセスを意味するprolemです。

  • オプションBを使用すると、1つのコンテキストのみを処理するだけで、クエリははるかに簡単になります。このアプローチの主な関心事は、クライアントごとに1年あたり10.000を超えるレコードを持つテーブルがあることです。したがって、10年間で500人のクライアントがいると、50万のレコードを持つテーブルを持つことができ、これがパフォーマンスに影響する可能性があります。

ありがとうございます。私たちは、ゲーム内で1つのより多くの事を持っているので

EDIT

はここのものは、複数のデータベース対単一アボ問題ではない、すべてのクライアントが共通のデータベースにアクセスする必要があります。

EDIT 2

のは、我々はすべて私達の顧客のための単一のデータベースのために行くことに決めたとしましょう。したがって、複数のドメインがあり、それぞれがアプリケーションを実行していますが、それぞれのドメインはデータのみを取得する必要があります。

どうすればこのことができますか?各テーブルにClientIdを追加し、各サイトのweb.configでパラメータ "clientId"を使用してデータをフィルタリングしますか?

+0

あなたは、現在、各クライアントのサイトで敷地内にSQL Serverを使用していますか? 1つの中央データベースでは、ネットワークの待ち時間を考慮する必要があります。このラインに沿って、彼らはすべて地理的に近いですか?セキュリティはあなたにとって大きな懸念になるでしょう。 –

+0

オプションBの懸念を緩和するために、テーブルを分割することができます –

+0

この時点ではすべてのデータベースが同じサーバー上にあります...私たちが考えている唯一のことは、グローバル・プラットフォームの開発 –

答えて

0

私の個人的な好みはオプションAのためであり、主な理由はセキュリティのためです。あなたは基本的に、あるクライアントのデータを別のクライアントに漏洩させるために、2つの障害点しかありません。

サービスを共通データの上に置くと、ユーザーデータがその側を処理するための頻繁な要求をキャッシュすることができます。

+0

私たちの主なことは、すべてのユーザーと他の一般的なものを格納する共通のデータベースが必要であり、ユーザー情報が必要なので、ほとんどのクエリはそのデータベースを照会する必要があります。また、すべてのクライアントがこれらのユーザーを更新できるので、誰もが更新を入手できます。私たちの主な問題は、2つのコンテキストが必要でクエリが複雑でEFの利点のいくつかが失われているためです。 –

0

オプションAは、他のクライアントからの要求のために、すべての異なるクライアントがそれぞれの選択されたトランザクションレコードでクエリを実行し、パフォーマンスの問題が発生しないようにするための推奨アプローチです。

また、オプションAでは、オプションBの挑戦であると判明するエンティティベースのカスタマイズ(将来必要な場合)が可能になります。マルチテナントベースのアーキテクチャが推奨されます。

以下のリソースは、いくつかの選択肢や可能性についてお手伝いします。

https://msdn.microsoft.com/en-us/library/aa479086.aspx

+0

同じデータベース内で複数のデータベースを使用するよりも、サーバ? –

+0

今後クライアントごとにカスタマイズすることはありません。これはソフトウェアパッケージです。私たちの主な問題は、共通のデータベースに格納されるクライアントでユーザーが作成されても、すべてのクライアントがユーザーなどの共通データを持っていることです。 –

+0

同じ物理サーバーに複数のデータベースをホストでき、最適なパフォーマンスのためのより詳細な設定。1つのマスターデータベースには、ソフトウェアの機能要件に応じてすべての異なるデータベースで共有されるユーザーを格納できますが、共有された別個のクライアントデータベースで最適な最適化が行われます。 –

関連する問題