2009-04-30 7 views
3

Ich baue eine Intranet-Web-App mit einem Oracle-Back-End. Die Oracle DB wird aus Gründen, die für diese Diskussion nicht wichtig sind, auf einem anderen Server repliziert. Ich bin mir ziemlich sicher, dass wir Oracle Basic Replication und nicht Advanced verwenden werden.Warum ist eine GUID die beste Wahl für eine PK, wenn Sie Replikation durchführen?

Kann mir jemand erklären, warum die meisten Diskussionen um Primärschlüssel gehen so etwas wie:

  • Verwendung von auto-inkrementiert Ints für PKs 99% der Zeit ganz gut ist
  • AUSSER wenn Sie tun Replikation. Verwenden Sie dann GUIDs für Ihre PKs.

Niemand scheint jemals zu erklären, warum die Ausnahme für die Replikation, und ich verstehe nicht warum.

Antwort

7

Ich glaube, das Argument GUID-for-Replication gilt nur dann wirklich, wenn beide Server neue Daten erhalten. Dann möchten Sie nicht, dass neue Zeilen Konflikte verursachen. Verwenden Sie daher GUIDs, da die PK - Replikation in beide Richtungen gehen kann.

Wir replizieren Autoincrement-Tabellen die ganze Zeit, aber es ist eine strenge Master/Slave-Replikation, wo Daten nur auf den Master geschrieben werden.

+0

macht völlig Sinn. Danke Tom. – theog

3

Ein Wort: MERGE

Die einzige Möglichkeit, die Mergereplikation arbeiten kann, ist, wenn alle der „Master“ Box können einen neuen Schlüssel erstellen, ohne dass es mit den anderen in Konflikt.

1

Wenn man bedenkt, was passiert, wenn zwei Servern, die miteinander repliziert werden und haben wird, um Daten zu ihnen zwischen Synchronisation hinzugefügt, das Problem deutlich:

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, also gibt es einen Konflikt!

+0

Dies war eine hilfreiche Illustration - danke Kevin. – theog