Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ключевое поле при репликации.  [new]
Vadim X
Guest
Расскажите кто как решает проблему с ключевыми полями.
Самый простой способ
int Identity=Yes 1,1

Ну, а если таблица(достаточно большая и оперативная,
т.е. мах 50 записей в сек. около 5000000+ ) может создаваться на 200 не связанных по сети
машинах с последующей репликацией.

Как быть заводить UNIQUEIDENTIFIER или Bigint?
Или есть другие способы.
17 май 04, 17:28    [682959]     Ответить | Цитировать Сообщить модератору
 Re: Ключевое поле при репликации.  [new]
Вербняков Александр
Member

Откуда: г.Таганрог, Ростовская область
Сообщений: 498
при репликации это поле будет создано автоматически без участи пользователя, если в таблице нет rowguid и не установлено свойство - поле есть rowguid для таблицы. В общем тебя это не должно волновать :)
17 май 04, 18:02    [683021]     Ответить | Цитировать Сообщить модератору
 Re: Ключевое поле при репликации.  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Это ОЧЕНЬ должно волновать. Потому что если использовать целочисленный тип для ключевого поля, то надо задумываться о разделении диапазонов, а это напрямую связано с количеством подписчиков.

Имхо, uniqueidentifier лучше подходит при таком количестве подписчиков. Впрочем, если вы посмотрите максимальное значение числа типа bigint и поделите его на количество ваших подписчиков и полученное число устроит вас как максимально доступное для нумерации на _одном_ сервере, то и bigint можно.

Кстати, кто-нибудь сталкивался с таким размером репликационной группы? Это нормально работает? У меня в реальных условиях было 20-30 серверов, не больше.
17 май 04, 18:37    [683111]     Ответить | Цитировать Сообщить модератору
 Re: Ключевое поле при репликации.  [new]
Вербняков Александр
Member

Откуда: г.Таганрог, Ростовская область
Сообщений: 498
У меня 32 подписчика, ключевое поле INT и работают уже скоро будет год и планируется добавить ещё несколько, проблем с выдачей диапазона нет
17 май 04, 18:43    [683126]     Ответить | Цитировать Сообщить модератору
 Re: Ключевое поле при репликации.  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Угу. Замечательно. Я только хочу сказать, что данное "без проблем" сильно зависит от количества подписчиков и интенсивности использования этого первичного ключа.

Формула-то проста: MAX_VALUE (максимум для int, bigint etc) делится на N (количество подписчиков), получается некое MAX_PER_SERVER.

Следовательно, каждый сервер ограничен в своем росте первичного ключа не MAX_VALUE, как это было бы без репликации, а MAX_PER_SERVER.

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

Само собой, данный риск есть и без репликации. Но чем больше партнеров, тем меньше диапазон каждого из них.
17 май 04, 18:53    [683147]     Ответить | Цитировать Сообщить модератору
 Re: Ключевое поле при репликации.  [new]
RoVS
Member

Откуда: Череповец
Сообщений: 689
А если ввести серии, и составной ключ серия+номер...
17 май 04, 20:30    [683247]     Ответить | Цитировать Сообщить модератору
 Re: Ключевое поле при репликации.  [new]
Александр Гладченко
Member

Откуда:
Сообщений: 10752
Блог
В качестве дополнительной информации к размышлению:
https://www.sql.ru/articles/mssql/03100902ArchitectingReplicationWithIdentityColumns.shtml
https://www.sql.ru/articles/mssql/03100903AutomaticallyAssignIdentityRangeForSubscription.shtml

Если репликация слиянием, я бы предложил отказаться вообще от Identity, оставив лиш rowguid, который всёравно будет дополнительно создан.
18 май 04, 13:32    [684521]     Ответить | Цитировать Сообщить модератору
 Re: Ключевое поле при репликации.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31602
2GreenSunrise
автор
Таким образом, если длительность жизни вашей программы достаточно велика и интенсивность описанных операций тоже велика, есть риск достигнуть предела диапазона.


Если использовать bigint, то такого риска нет.
18 май 04, 15:02    [684924]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить