SQL Server 2000/2005 столбец идентификации + репликация - PullRequest
1 голос
/ 20 октября 2008

Я уже посмотрел некоторые ресурсы и просто хочу уточнить и получить мнение.

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

Для целей этого вопроса я говорю о двух или более способах репликации для решения проблем глобального доступа, и у нас есть столбцы идентификаторов.

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

Насколько я понимаю, вы выделяете диапазон начальных значений для каждого сервера базы данных, и он будет их использовать, вы знаете, что это уникальная причина, по которой вы задали диапазоны, которые не пересекаются. Значит ли это, что во время репликации эти значения вставляются в начальный столбец?

так что если вы выделите диапазоны 1-10 и 11-20 для 2 серверов после того, как на каждый сервер будет вставлено 10 строк, у вас будут семена 1-20 в обеих базах данных?

1 Ответ

4 голосов
/ 21 октября 2008

Существует опция " НЕ ДЛЯ РЕПЛИКАЦИИ ", которая может применяться к столбцам идентификаторов (а также к триггерам и другим ограничениям).

В вашем примере server1 будет заполнять 1-10, но просто принимать реплицированные 11-20.

Несколько способов установки семян:

Либо: установите начальное число / приращения с помощью NOT FOR REPLICATION, как это

  • Семя 1, приращение 2
  • Семя 2, приращение 2
  • Семя -1, приращение -2
  • Семя -2, приращение -2
  • Семя 1000000001, приращение 2
  • Семя 1000000002, приращение 2
  • Семя -1000000002, приращение -2
  • Семя -1000000001, приращение -2

Это дает вам 500 000 000 на сервер на 8 серверов

Или: Добавьте второй столбец с именем ServerID для предоставления составных ключей, используйте NOT FOR REPLICATION для столбца ID

Это масштабируется, скажем, до 256 серверов для tinyint с 2 ^ 32 строками на сервер

В любом случае работает ...

...