Я знаю, что это старый поток, но он имеет ту же структуру, которую мы использовали в течение последних 2 лет, и в настоящее время работают 1768 баз данных на 3 серверах.
У нас есть следующая настройка (не включая зеркалаи т. д.):
- 2 сервера веб-фермы и 4 контент-сервера
- Экземпляр SQL только для основной базы данных клиентов, которая запрашивается, когда они получают доступ к своей веб-странице по идентификаторуполучить имя сервера / экземпляра и базы данных, на которых находятся их данные.Затем он сохраняется в билете аутентификации.
- 3 сервера SQL для размещения баз данных клиентов с распределением нагрузки при создании на основе текущего общего числа учащихся, которые существуют во всех базах данных на каждом сервере (быстро вычисляется по полю номера лицензии)в основной базе данных).
- На каждом SQL Server имеется меньшая настройка основной базы данных, которая содержит общие статические данные, используемые всеми клиентами, что позволяет использовать меньшие клиентские базы данных и быстрее обновлять содержимое.
Самое важное, как упомянуто выше, - это синхронизировать структуры базы данных!Для этого я закончил программировать небольшую форму Windows .NET, которая просматривает всех клиентов в основной базе данных, и вы вставляете код для выполнения, и он будет циклически извлекать местоположение базы данных и выполнять пройденный вами SQL.
Создание новых клиентов также вызвало некоторые проблемы для нас, поэтому я закончил программировать систему управления для наших продавцов и создать новую базу данных на основе резервной копии неактивной «пустой» базы данных, поэтому у нас естьпоследняя БД без необходимости перепрограммировать весь скрипт создания базы данных.Затем он вставляет данные клиента в основную базу данных с указанием места, где была создана база данных, и переносит все старые данные из старой версии нашего программного обеспечения.Все это выполняется в отдельном экземпляре перед перемещением, что уменьшает любые блокировки SQL.
Теперь мы переходим к единой базе данных для нашей следующей версии программного обеспечения, поскольку избыточность базы данных практически невозможна при таком количестве баз данных!Это очень важно учитывать, так как SQL создает пару ожидающих задач, которые зеркально отражают ваши данные для каждой базы данных, как только вы начинаете умножать базы данных, они выходят из-под контроля, и система почти исключительно выполняет синхронизацию и может блокироваться из-за сдвигаколичество потоков.См. Стр. 30 документа Microsoft ниже:
Руководство SQLCAT по аварийному восстановлению высокой доступности. Pdf
Однако у меня есть сомнения по поводу перехода на одну базу данных, из-за некоторыхпроблемы, о которых говорилось выше, такие как постоянная проверка в каждой отдельной процедуре того, что текущий клиент имеет доступ только к своим данным, а также то, что происходит в соответствии с одной маленькой проблемой, теперь будет влиять на каждую отдельную базу данных, такую как индексация таблиц и так далее.Кроме того, в тот момент, когда наш клиент размещен на трех серверах, но одна база данных будет означать, что у нас есть избыточность, но если ошибка была в базе данных, а не из-за сбоя сервера, то это не каждый 1 клиент, а только одна база данных.
В общем, все зависит от того, что вы делаете и хотите ли вы избыточности;для меня избыточность теперь является ключевой, и все в идеальном мире не должно происходить (например, ошибка, которая вызывает ошибки в базе данных для всех).Мы только начинали ожидать, что около ста или около того перейдут в систему из старого программного обеспечения, размещенного на собственном хосте, и это быстро превратилось в 200 500 000 1500 500 ... Теперь у нас более 750 000 пользователей используют нашу систему каждый год, и в августе / сентябре мыв сети более 15 000 одновременно работающих пользователей (ожидается, что в этом году их число достигнет 20 000).
Надеюсь, что это поможет кому-то по линии: -)
С уважением
Лиам