5

Google Cloud Spanner recommends gegen monoton steigende Ganzzahlen für Primärschlüssel. Dies ist ein perfekter Sinn für Top-Level-Tabellen, da es Hotspots erstellen würde. Aber was ist mit verschachtelten Tabellen? Sie werden trotzdem auf demselben Knoten gespeichert. Sie werden auch in einer sortierten Reihenfolge gehalten, so dass die Verwendung von UUID oder einer anderen zufälligen ID suboptimal erscheint, insbesondere wenn sie auch in der sortierten Reihenfolge abgerufen werden.Autoinkrement in Google Cloud Spanner

Ist das Lesen der Max-ID und das Speichern von MaxId + 1 für eine neue Zeile die richtige Lösung hier?

Antwort

3

Den Zeilen mit den verschachtelten untergeordneten Tabellen wird der Schlüssel der übergeordneten Tabelle vorangestellt. Daher ist es in Ordnung, sie als nicht sequenzielle Schlüssel zu betrachten, solange der übergeordnete Schlüssel nicht sequenziell ist. In dieser Situation sollte es im Allgemeinen in Ordnung sein, da, wie Sie bemerken, dieser gesamte Schlüsselbereich von einem Span Server bedient wird. Wenn Sie besorgt sind, einen einzelnen Span-Server in dieser Situation zu erkennen, ist es am besten, die Tabelle nicht zu verschachteln.

Es sollte auch darauf hingewiesen werden, dass es wirklich monoton steigend ist oder Schlüssel abnimmt, die gegen empfohlen, da sie die gleiche Wirkung haben, nur an den gegenüberliegenden Seiten des Bereichs.

+0

Danke für die Antwort. Was ist die beste Vorgehensweise, um die steigenden Zahlen in den Interleaved-Tabellen zu verwenden? Ist es einfach: max = lesen ("SELECT MAX (SubId) VON SubTable WHERE ParentId = ..."); schreiben ("INSERT INTO SubTable (SubId, ...) VALUES (" + (max + 1) + ", ...)") ? –

+1

Im Allgemeinen ist es immer noch eine gute Idee, UUIDs mit einer Spalte für sequenzielle IDs bei Bedarf zu vermeiden und zu verwenden. Es gibt viele Gefahren, die dort lauern, wie zum Beispiel dafür sorgen, dass Sie es in einer Transaktion tun, was passiert, wenn der neueste (und maximale) Wert gelöscht wird - können Sie es wiederverwenden oder nicht ?. Es ist wahrscheinlich besser, eine andere Tabelle zu verwenden, um den Zähler zu speichern und sicherzustellen, dass Sie über entsprechende Transaktionen verfügen. –

Verwandte Themen