Почему GUID — лучший выбор для ПК, если вы собираетесь выполнять репликацию?
-
03-07-2019 - |
Вопрос
Я создаю веб-приложение для интрасети с серверной частью 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>
<---теперь две разные записи имеют одинаковый идентификатор, поэтому возник конфликт!