Frage

Ich möchte ein verteiltes System bauen. Ich muss Daten in Datenbanken speichern und es wäre hilfreich, eine zu verwenden Uuid oder ein Guid als Hauptschlüssel für einige Tabellen. Ich nehme an, es ist ein Nachteil mit diesem Design, da die UUID/RID ziemlich groß ist und fast zufällig ist. Die Alternative besteht darin, ein automatisch inkrementiertes INT oder Long zu verwenden.

Was sind die Nachteile bei der Verwendung von UUID oder GUID als Hauptschlüssel für meine Tabellen?

Ich werde wahrscheinlich Derby/Javadb (auf den Clients) und PostgreSQL (auf dem Server) als DBMs verwenden.

War es hilfreich?

Lösung

Es hängt von Ihrer Erzeugungsfunktion und Größe der Endtabellen ab

Guids sollen sein Global einzigartig Kennungen. Wie in der erläutert Postgres 8.3 Dokumentation Es gibt keine Methoden, die allgemein geeignet sind, um diese Kennungen zu generieren, aber PostgreSQL versendet mit ein paar weiteren nützlichen Kandidaten.

Aus dem Umfang Ihres Problems und der Notwendigkeit offline Schreibungen, Sie haben die Verwendung von irgendetwas anderes als eine Richtlinie sehr gut ausgeschaltet, und daher gibt es keine kompensatorischen Vorteile anderer Systeme.

Aus funktionaler Sicht ist die Schlüssellänge je nach Anzahl der Lesevorgänge und der Größe der Tabelle normalerweise kein Problem auf keinem modernen System. Als alternative Methodik könnten Offline -Kunden neue Datensätze stapeln ohne ein Primärschlüssel und fügen Sie sie einfach ein, wenn Sie wieder anschließen. Da PostgreSQL den "seriellen" Datentyp bietet, müssen Clients die ID niemals bestimmen, wenn sie ein einfaches Schreiben in die Datenbank ausführen können.

Andere Tipps

Ein weiterer Rat - Verwenden Sie niemals Guids als Teil des Clustered -Index. GUIDs sind nicht sequentiell. Wenn sie Teil des Clustered-Index sind, müsste die Datenbank jedes Mal, wenn Sie einen neuen Datensatz einfügen, alle ihre Speicherseiten neu ordnen, um den richtigen Ort für das Einfügen zu finden, falls mit INT (Bigint) automatisch inkrement wäre gerade die letzte Seite.

Wenn wir nun einige DB -Realisierungen betrachten: 1.) MySQL - Primärschlüssel sind gruppiert, ohne die Möglichkeit, das Verhalten zu ändern - die Empfehlung besteht Primärschlüssel Unclustered und verwenden Sie ein anderes Feld als Clustered -Index, z. B. autoIncrement int.

Es hängt davon ab, ob.

Im Ernst, mit allem, was Sie bisher gegeben haben, ist dies so weit wie möglich.

Warum sollte es hilfreich sein, UUIDs zu verwenden? Warum benutzen Sie INTs nicht? Warum können Sie später nicht einfach auf Uuids indexieren? Verstehen Sie, was es bedeutet, eine sortierte Liste mit dem Schlüssel eines UUID zu haben und nach ein paar Millionen Zeilen eine zufällige (nicht sequentielle) UID einzufügen?

Auf welcher Plattform wird das laufen? Wie viele Festplatten? Wie viele Benutzer? Wie viele Platten?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top