Por que é um GUID é a melhor escolha para um PK se você está indo fazer a replicação?
-
03-07-2019 - |
Pergunta
Eu estou construindo um aplicativo web intranet com um back-end Oracle. O banco de dados Oracle será replicado em outro servidor, por razões que não são importantes para esta discussão. Eu sou razoavelmente certo que estaremos usando o Oracle Replication Basic, não avançada.
Alguém pode me explicar por que a maioria das discussões em torno de chaves primárias ir algo como:
- Use de inteiros incrementado automaticamente para PKs é apenas multa de 99% do tempo
- exceto se você está fazendo replicação. Em seguida, use GUIDs para seus PKs.
Ninguém nunca parece explicar por que a exceção para replicação, e eu não entendo por que.
Solução
Eu acredito que o argumento GUID-for-replicação única realmente se aplica se ambos os servidores vão receber novos dados. Então você não quer novas linhas para o conflito, de modo GUIDs usar como PK - replicação pode ir nos dois sentidos
.Nós replicar tabelas de incremento automático o tempo todo, mas é uma replicação estrita master / slave, onde os dados só é escrito para o Mestre.
Outras dicas
Uma palavra: MERGE
A única maneira de mesclagem de replicação pode funcionar é se todas as caixas de "mestre" pode criar uma nova chave sem ele entrar em conflito com os outros.
Se você considerar o que acontece quando dois servidores que são replicados entre si e ter dados que estão sendo adicionados a eles entre a sincronização, o problema se torna aparente:
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>
<--- dois registros diferentes têm o mesmo ID agora, por isso há um conflito!