Почему GUID — лучший выбор для ПК, если вы собираетесь выполнять репликацию?

StackOverflow https://stackoverflow.com/questions/809276

Вопрос

Я создаю веб-приложение для интрасети с серверной частью Oracle.БД Oracle будет реплицирована на другой сервер по причинам, которые не важны для данного обсуждения.Я вполне уверен, что мы будем использовать Oracle Basic Replication, а не Advanced.

Может кто-нибудь объяснить мне, почему большинство дискуссий вокруг первичных ключей выглядят примерно так:

  • Использование автоматически увеличивающихся целых чисел для ПК вполне допустимо в 99% случаев.
  • ЗА ИСКЛЮЧЕНИЕМ случаев, когда вы выполняете репликацию.Затем используйте GUID для своих ПК.

Кажется, никто никогда не объясняет, почему сделано исключение для репликации, и я не понимаю, почему.

Это было полезно?

Решение

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

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

Другие советы

Одно слово:ОБЪЕДИНИТЬ

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

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

Time  Server  NewID
001   A       1
002   A       2
003 <sync of server A and B>
004   A       3
005   B       3
006 <sync of server A and B>

<---теперь две разные записи имеют одинаковый идентификатор, поэтому возник конфликт!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top