У нас есть очень крупная база данных уровня предприятия. Как часть нашей бизнес-модели, каждый веб-пользователь каждый месяц посещает наши веб-серверы в одно и то же время, что, в свою очередь, приводит к появлению у нас проблем с SQL. Трафик очень тяжелый и продолжает увеличиваться с ростом компании. Оптимизация sql proc была выполнена, а оборудование уже масштабировано до очень высокого уровня.
Сейчас мы стремимся защитить базу данных, чтобы мы могли справиться с ростом компании и будущими нагрузками.
Мы решили, какие именно данные следует защитить. Это часть нашей базы данных, которая широко используется.
Тем не менее, мой вопрос касается неосколенных данных, которые являются общими / универсальными. Примером таких данных может быть, например, таблица инвентаризации или, возможно, таблица Employee, таблица пользователей и т. Д.
Я вижу два варианта обработки этих общих / универсальных данных:
1) дизайн 1 - Поместить общие / универсальные данные во внешнюю базу данных. Все записи будут происходить здесь. Эти данные затем будут реплицированы на каждый сегмент, что позволит каждому фрагменту читать эти данные и выполнять внутреннее соединение с этими данными в процессах t-sql.
2) дизайн 2 - дать каждому осколку собственную копию всех общих / универсальных данных. Пусть каждый шард записывает локально в эти таблицы и использует репликацию слиянием sql для обновления / синхронизации этих данных на всех других шардах.
заботы о дизайне # 1
1) Транзакционные проблемы: если у вас возникла ситуация, когда вы должны записать или обновить данные в сегменте, а затем, например, записать / обновить общую / универсальную таблицу в 1 сохраненном протоколе, вы больше не сможете сделать это легко. Данные теперь существуют в отдельных экземплярах SQL и базах данных. Возможно, вам придется задействовать MS DTS, чтобы посмотреть, сможете ли вы объединить эти записи в транзакцию, поскольку они находятся в отдельной базе данных. Производительность является проблемой здесь, и возможные перезаписи могут быть задействованы для процедур, которые записывают в зашифрованные и общие данные.
2) потеря ссылочной целостности. Невозможно сделать перекрестную ссылочную целостность базы данных.
3) Запись больших областей системы, чтобы она могла записывать общие данные в новую универсальную базу данных, но считывать общие данные из сегментов.
4). увеличенные поездки базы данных. Как и № 1 выше, когда вы сталкиваетесь с ситуацией, в которой вы должны обновить данные с разделением на сегменты и общие данные, вы собираетесь выполнить несколько циклов, чтобы выполнить это, поскольку данные теперь находятся в отдельных базах данных. Некоторая задержка в сети здесь, но я не беспокоюсь об этой проблеме так сильно, как выше 3.
заботы о дизайне № 2
В дизайне № 2 каждый шард получает свой собственный экземпляр всех общих / универсальных данных. Это означает, что весь код, который присоединяется или обновляет общие данные, продолжает работать / работать так же, как и сегодня. От команды разработчиков требуется очень мало перекодирования / переписывания. Однако этот дизайн полностью зависит от репликации слиянием, чтобы синхронизировать данные между всеми сегментами. dbas высококвалифицированны и очень обеспокоены тем, что репликация слиянием может не справиться с этим, и в случае сбоя репликации слиянием, что восстановление после этого сбоя не велико и может очень негативно повлиять на нас.
Мне любопытно знать, если кто-то пошел с вариантом дизайна # 2. Мне также любопытно узнать, пропускаю ли я третий или четвертый вариант дизайна, который я не вижу.
заранее спасибо.