Репликация SQL-сервера и EDM - PullRequest
       18

Репликация SQL-сервера и EDM

0 голосов
/ 20 октября 2011

Для высокой доступности наша компания добавляет новый веб-сервер и сервер sql. Мы будем выполнять репликацию P2P для обеспечения согласованности двух серверов SQL. Тем не менее, мы используем EDM в нашем приложении, и оно основано на существующем сервере. Если мы добавим еще один SQL-сервер, мне нужно создать еще один набор EDM для второй базы данных. Поддержание 2 файлов EDMX будет кошмаром. И, возможно, в будущем для целей большей доступности мы добавим еще один SQL-сервер. Должен быть лучший способ, чем отдельный файл EDMX для каждого сервера SQl. Кроме того, для уже существующего кода, который обращается к базе данных с помощью EDM, как я должен изменить его так, чтобы он выбирал правильную базу данных и, следовательно, ее EDM. В настоящее время у меня есть код как:

с использованием (var context = new MyCOmpanyModel.MyCompanyEntities ()) {....}

Я не хочу менять это на каждой странице, которая обращается к EDM. Должен быть лучший способ выбора SQL-сервера (или сущностей), и их установка может быть в классе базовой страницы или чем-то в этом роде.

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Похоже, вы собираетесь реплицировать данные между одними и теми же версиями сервера баз данных, на которых размещается база данных, с одной и той же схемой = нет необходимости изменять EDM; единственное необходимое изменение - это строка подключения для второго веб-сервера.

Интересно, почему вы выбрали это решение? Имхо для достижения высокой доступности компании обычно переходят на отказоустойчивую кластеризацию (активную / пассивную) для базы данных и балансировки нагрузки для веб-сервера. Балансировка нагрузки веб-сервера прозрачна для клиентов, а отказоустойчивая кластеризация прозрачна для веб-сервера. Отказоустойчивый кластер использует общее хранилище NAS или SAN (с собственными функциями высокой доступности, такими как RAID-массивы и оперативные замены). В сценарии с активным / пассивным кластером вы должны требовать только лицензии SQL-сервера для активного сервера (если это не изменилось в последнее время).

0 голосов
/ 20 октября 2011

Спасибо за ответ. Вот что вы предлагаете:

<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 в сеть позже. Есть ли лучший способ установить строку подключения к серверу или ObjectContext obj один раз в приложении и просто забыть об этом.

Что касается вашего предложения сделать кластеризацию для сервера базы данных, кластеризация стоит дорого. Требуется дополнительное аппаратное и программное обеспечение. Репликация p2P не кажется такой уж дорогой. Тем не менее, спасибо за предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...