Warum ist eine GUID ist die beste Wahl für eine PK wenn Sie vorhaben, die Replikation zu tun?
-
03-07-2019 - |
Frage
Ich baue einen Intranet-Web-App mit einem Oracle-Backend. Die Oracle-DB wird auf einem anderen Server aus Gründen repliziert werden, das zu dieser Diskussion nicht wichtig sind. Ich bin ziemlich sicher, wir werden mit Oracle Basis Replikation, nicht Advanced.
Kann mir jemand erklären, warum die meisten Diskussionen um Primärschlüssel gehen so etwas wie:
- Die Verwendung von auto-inkrementiert Ints für PKs ist nur gut 99% der Zeit
- AUSSER wenn Sie die Replikation tun. Dann GUIDs für Ihre PKs verwenden.
Niemand scheint überhaupt, warum die Ausnahme für die Replikation zu erklären, und ich verstehe nicht, warum.
Lösung
Ich glaube, das GUID-for-Replikation Argument nur wirklich gilt, wenn beiden Server neue Daten empfangen werden. Dann wollen Sie keine neuen Zeilen zu Konflikten, so verwenden GUIDs als PK -. Replikation in beide Richtungen gehen kann
Wir replizieren autoincrement Tabellen die ganze Zeit, aber es ist eine strenge Master / Slave-Replikation, wo die Daten nur an den Master geschrieben wird.
Andere Tipps
Ein Wort: MERGE
Die einzige Möglichkeit, die Mergereplikation arbeiten kann, ist, wenn alle der „Master“ aus, um einen neuen Schlüssel erstellen können, ohne sie mit den anderen in Konflikt.
Wenn man bedenkt, was passiert, wenn zwei Servern, die miteinander repliziert werden und haben für sie bestimmten Daten zwischen Synchronisation hinzugefügt wird, wird das Problem offensichtlich:
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>
<--- zwei verschiedene Datensätze haben die gleiche ID jetzt, so gibt es einen Konflikt!