Почему GUID является лучшим выбором для ПК, если вы собираетесь делать репликацию? - PullRequest
3 голосов
/ 01 мая 2009

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

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

  • Использование автоинкрементных целочисленных значений для ПК - это нормально в 99% случаев
  • КРОМЕ, если вы делаете репликацию. Затем используйте GUID для ваших PK.

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

Ответы [ 3 ]

7 голосов
/ 01 мая 2009

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

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

3 голосов
/ 01 мая 2009

Одно слово: MERGE

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

1 голос
/ 01 мая 2009

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

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>

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

...