2011-10-19 13 views
0

高可用性のために、当社は新しいWebサーバーとSQLサーバーを追加しています。 2つのSQLサーバを一貫性を持たせるためにP2Pレプリケーションを行います。ただし、アプリケーションではEDMを使用しており、既存のサーバーをベースにしています。別のSQLサーバーを追加する場合は、2番目のデータベース用にもう1組のEDMを作成する必要があります。 2つのedmxファイルを維持するのは悪夢です。将来的には、他のSQLサーバーを追加することも可能です。各SQlサーバ用に個別のEDMXファイルを作成する方が良い方法が必要です。さらに、EDMを使用してデータベースにアクセスする既存のコードについては、正しいデータベースを選択してEDMを使用するように変更する必要があります。使用SQLサーバーのレプリケーションとEDM

(VARコンテキスト=新しいMyCOmpanyModel.MyCompanyEntities()){....}

私はEDMにアクセスするすべてのページにこれを変更する必要はありません:現在のように、私は、コードを持っています。 SQLサーバー(またはエンティティ)を選択するためのより良い方法があり、それらが基本ページクラスまたはそのようなものに設定されている必要があります。

ご協力いただければ幸いです。

答えて

1

同じスキーマでデータベースをホストしている同じデータベースサーバーバージョン間でデータをレプリケートするように思えますが、EDMを変更する必要はありませんが、必要な変更は2番目のWebサーバーの接続文字列にする必要があります。

なぜこのソリューションを選択しましたか? Imhoは高可用性企業を達成するために、通常、データベースのフェールオーバークラスタリング(アクティブ/パッシブ)と、Webサーバーのロードバランシングを行います。 Webサーバーの負荷分散はクライアントには透過的で、フェールオーバークラスタリングはWebサーバーに対して透過的です。フェイルオーバークラスターは、共有NASまたはSANストレージ(RAIDアレイやホットスワップなどの独自の高可用性機能を使用)を使用します。アクティブ/パッシブクラスタのシナリオでは、アクティブサーバー(これが最近変更されていない場合)のSQLサーバーライセンスのみが必要です。

0

返信いただきありがとうございます。これはあなたが示唆しているものです:

<add name="MainDB" 
connectionString="metadata=res://*/MainDB..." 
providerName="System.Data.EntityClient" /> 
<add name="OtherDB" 
connectionString="metadata=res://*/MainDB..." 
providerName="System.Data.EntityClient" /> 

string connectionStringKey; 


if(Server == 1) 
    connectionStringKey = "MainDB"; 
else 
    connectionStringKey = "OtherDB"; 

     using (var context = new MainDB("name=" + connectionStringKey)) 
     { 
     } 

私はほとんどすべてのページに上記のチェックサーバーコードを入れたくありません。私たちが後でネットワークにもう1つのSQLサーバーを追加すると、大きな頭痛になります。アプリケーション内でサーバ接続文字列またはObjectContext objを一度設定して、それを忘れるより良い方法がありますか?

データベースサーバーのクラスタリングの提案に関して、クラスタリングは高価です。追加のハードウェアとソフトウェアが必要です。 p2Pレプリケーションはそれほど高価ではないようです。しかし、提案に感謝します。

関連する問題