Ich weiß, dass diese Art von Frage häufig gestellt wird, aber ich habe noch keine überzeugenden Argumente gelesen, um diese Entscheidung treffen zu können. Bitte bei mir tragen!
Ich habe eine riesige Datenbank - sie wächst um ungefähr 10.000.000 Datensätze pro Tag. Die Daten sind relational und aus Performancegründen lade ich die Tabelle mit BULK COPY. Aus diesem Grund muss ich Schlüssel für die Zeilen generieren und kann mich nicht auf eine IDENTITY-Spalte verlassen.
Eine 64-Bit-Ganzzahl - eine Ganzzahl - ist für mich ausreichend breit, aber um die Eindeutigkeit zu gewährleisten, benötige ich einen zentralen Generator, um meine IDs für mich zu erstellen. Ich habe derzeit einen solchen Generatordienst, der es einem Dienst ermöglicht, X-Sequenznummern zu reservieren und garantiert, dass keine Kollisionen auftreten. Dies hat jedoch zur Folge, dass alle Dienste, die ich habe, auf diesen einen zentralen Generator angewiesen sind. Daher kann ich mein System nur eingeschränkt verteilen und bin nicht zufrieden mit den anderen Abhängigkeiten (z. B. der Anforderung eines Netzwerkzugriffs) durch diesen Entwurf. Dies war gelegentlich ein Problem.
Ich überlege jetzt, sequentielle GUIDs als meine Primärschlüssel zu verwenden (extern für SQL generiert). Soweit ich anhand meiner eigenen Tests feststellen konnte, besteht der einzige Nachteil darin, dass ein größerer Datentyp mehr Speicherplatz benötigt (was durch die Verwendung in Indizes noch verstärkt wird). Ich habe keine erkennbare Verlangsamung der Abfrageleistung im Vergleich zur Bigint-Alternative festgestellt. Das Laden des Tisches mit BULK COPY ist etwas langsamer, aber nicht viel. Meine GUID-basierten Indizes werden dank meiner sequentiellen GUID-Implementierung nicht fragmentiert.
Grundsätzlich möchte ich wissen, ob es andere Überlegungen gibt, die ich möglicherweise übersehen habe. Im Moment bin ich geneigt, den Sprung zu wagen und GUIDs zu verwenden. Ich bin kein Datenbankexperte, daher würde ich jede Anleitung wirklich begrüßen.