2011-10-19 2 views
0

고 가용성을 위해 당사는 새로운 웹 서버 및 SQL 서버를 추가하고 있습니다. 우리는 두 SQL 서버를 일관성있게 만들기 위해 P2P 복제를 수행 할 것입니다. 그러나 우리는 애플리케이션에서 EDM을 사용하고 있으며 기존 서버를 기반으로합니다. 다른 SQL 서버를 추가하는 경우 두 번째 데이터베이스에 다른 EDM 세트를 만들어야합니다. 2 개의 edmx 파일을 유지하는 것은 악몽 일 것입니다. 향후 SQL Server를 추가 할 가능성이 있기 때문에 향후에 추가 될 수 있습니다. 각 SQl 서버에 대해 별도의 EDMX 파일을 갖는 것이 더 좋은 방법이어야합니다. 또한 EDM을 사용하여 데이터베이스에 액세스하는 기존 코드의 경우 올바른 데이터베이스를 선택하고 EDM을 사용하도록 수정해야합니다. 사용SQL 서버 복제 및 EDM

(VAR 컨텍스트 = 새로운 MyCOmpanyModel.MyCompanyEntities()) {....}

나는 EDM를 액세스하는 모든 페이지에서이를 변경하지 않으 : 현재처럼, 나는 코드가 있습니다. SQL Server (또는 엔티티)를 선택하는 더 좋은 방법이 있어야하며 기본 페이지 클래스 또는 그와 비슷한 항목에 설정할 수 있습니다.

도움이 될 것입니다.

답변

1

같은 스키마로 데이터베이스를 호스팅하는 동일한 데이터베이스 서버 버전간에 데이터를 복제하는 것처럼 들리지만 EDM을 변경할 필요가 없습니다. 필요한 변경은 두 번째 웹 서버에 대한 연결 문자열이어야합니다.

왜이 솔루션을 선택하셨습니까? Imho는 고 가용성 (HA) 기업을 달성하기 위해 대개 데이터베이스의 장애 조치 클러스터링 (활성/수동)과 웹 서버의로드 균형 조정을 수행합니다. 웹 서버로드 균형 조정은 클라이언트에게는 투명하고 장애 조치 (failover) 클러스터링은 웹 서버에 투명합니다. 장애 조치 (failover) 클러스터는 공유 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)) 
     { 
     } 

나는 거의 모든 페이지에 위의 체크 서버 코드를 넣고 싶지 않습니다. 나중에 네트워크에 하나 이상의 SQL Server를 추가하면 큰 문제가됩니다. 한 번 응용 프로그램에서 서버 connectionstring 또는 ObjectContext obj를 설정하고 더 이상 잊어 버리는 더 좋은 방법이 있습니까?

데이터베이스 서버에 대한 클러스터링을 제안하면 클러스터링에 비용이 많이 듭니다. 추가 하드웨어 및 소프트웨어가 필요합니다. p2P 복제는 그렇게 비싸지 않습니다. 그러나 제안에 감사드립니다.