Уникальный идентификатор в качестве первичного ключа при синхронизации баз данных - PullRequest
1 голос
/ 28 мая 2011

Я провел большую часть дня, исследуя и тестируя различные методы синхронизации базы данных SQL-сервера с CoreData на Mac.Я проверил как INT, так и GUID (также последовательные GUID) в качестве моих первичных ключей, и хотя GUID являются худшими с точки зрения производительности, я не вижу другого способа обеспечения уникальности в разных системах.

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

Любая помощь будет высоко оценена, особенно если вы столкнулись с подобной проблемой,

Ответы [ 2 ]

2 голосов
/ 28 мая 2011

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

используйте столбцы идентификаторов и отправляйте их в разные непересекающиеся диапазоны:

1-100 million server A
100million1 -200 million server B 

и т.д.

или использовать составные ключи (идентификатор int + код местоположения), чтобы различать исходные местоположения данных: Три разных ряда:

1 AB
1 BZ
1 XV

Привет

Piotr

2 голосов
/ 28 мая 2011

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

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

Если вы не имеете дело с ГБ данных, в этом случае производительность не должна зависеть от GUID, учитывая, что выколонка GUID уже обработана с должной тщательностью.

Если вам нужно синхронизировать только две системы, я ранее создавал системы, где A использовал бы идентификатор (-1, -1) в качестве первичного ключа, а другой -Система использовала идентификатор (1,1) в качестве первичного ключа.Это обеспечивает легкую синхронизацию, сохраняя первичный ключ красивым и узкимОднако не будет работать для более чем двух систем.

...