2008-10-20 5 views
1

Я уже рассмотрел некоторые ресурсы и просто хочу уточнить и получить мнение.Идентификационный столбец SQL Server 2000/2005 + репликация

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

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

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

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

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

ответ

4

Существует опция «NOT FOR REPLICATION», которая может применяться к столбцам идентификации (и триггерам и другим ограничениям).

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

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

Либо: установить свое семенное/приращение с НЕ REPLICATION как этот

  • Seed 1, увеличивают 2
  • Seed 2, увеличивают 2
  • семян -1, -2 приращение
  • семян -2, -2 приращение
  • Семя 1000000001, приращение 2
  • Seed 1000000002, прирост 2
  • Seed -1000000002, прибавка -2
  • Seed -1000000001, прибавка -2

Это дает 500000000 на сервер для 8 серверов

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

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

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

Смежные вопросы