SQL Server: первичный ключ репликации больших данных - PullRequest
1 голос
/ 07 октября 2019

Я знаю, что эта тема обсуждалась иногда, но существуют разные мнения по этому поводу. Мой сценарий таков: я создал базу данных, которая будет заполнена 4 миллиардами записей, и каждый год будет добавляться от 1 до 2 миллионов записей.

У нас есть серверы в США и Европе, и мы делаем репликацию базы данных, чтобы они оставались похожими на этих серверах, например, то же самое, что Facebook делает с репликацией.

У меня вопрос в качестве первичного ключа таблиц, что я должен использовать - BigInt или Uniqueidentifier, или не имеет значения, что я использую для репликации?

  1. Должен ли я создать некластеризованный первичный ключ uniqueidentifier, а затем добавить еще один кластеризованный столбец bigInt?

Или

Должен ли я создать кластерный bigint первичный ключ?

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Без сомнения, используйте Uniqueidentifier.

Не добавляйте столбец bigint, он вам не нужен.

Если вы используете репликацию слиянием и не используетеУ меня нет уникального идентификатора, тогда сервер все равно добавит этот столбец.

Используя GUID, вы теперь можете настраивать архитектуру БД с несколькими мастерами. Если вы используете bigint в качестве поля идентификации, то вы либо заставляете себя использовать только одного мастера (для управления bigint), либо вам приходится придумывать схему, чтобы предотвратить столкновение нескольких серверов друг с другом. Кроме того, используя GUID, вы избавляетесь от угадываемых идентификаторов, что, как правило, хорошо.

Мое собственное тестирование в диапазоне сотен миллионов записей с добавлением / удалением миллионов ежедневно не показало падения производительности, когдаиспользование идентификаторов GUID против int для идентификаторов.

Последнее замечание - в большинстве мест base64 кодирует guid при вызове веб-служб или, если он будет отображаться где-либо - как в адресной строке.

0 голосов
/ 07 октября 2019

Я бы поспорил только с другим вариантом: я бы попытался ИЗБЕГАТЬ uniqueidentifier столбцы - НАИБОЛЕЕ ОПРЕДЕЛЕННО в качестве ключа кластеризации!

Ключ кластеризации наиболее реплицируемая структура данных в SQL Server - и с миллионами и миллионами строк это имеет огромное значение , если ваш ключ кластеризации имеет размер 8 или 16 байт. Не говоря уже о количестве разделений страниц, которые вводит ключ кластеризации uniqueidentifier, чего вы можете полностью избежать с помощью ключа кластеризации типа BIGINT.

Если вам действительно интересно - вы должныпрочитайте все эти статьи Кимберли Триппа - «Королевы индексирования» в пространстве SQL Server - которые ясно показывают, насколько плохим и контрпродуктивным может быть GUID в качестве ключа кластеризации:

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