13 Punkte von GN⁺ 2023-10-03 | 1 Kommentare | Auf WhatsApp teilen
  • Buildkite hat den neuen UUIDv7-Standard als Primärschlüssel eingeführt und damit das bisherige System aus sequenziellen Primärschlüsseln und UUID-Sekundärschlüsseln ersetzt
  • UUIDs (Universally Unique Identifiers) sind eindeutige Kennungen, die unabhängig erzeugt werden können, und werden in verteilten Systemen und Datenbanken широко eingesetzt
  • UUIDs bieten gegenüber sequenziellen Ganzzahl-Identifikatoren mehrere Vorteile, darunter Unvorhersehbarkeit, das Verhindern der Offenlegung sensibler interner Informationen und eine zusätzliche Verteidigungsschicht
  • Die Zufälligkeit von nicht zeitgeordneten Standard-UUIDs kann jedoch zu Leistungsproblemen in Datenbanken führen
  • Um dieses Problem zu lösen, experimentierte Buildkite mit zeitgeordneten, UUIDv4-kompatiblen UUIDs, wodurch die Write-Ahead-Log-Rate (WAL) in der Hauptdatenbank um 50 % gesenkt wurde
  • UUID Version 7 (UUIDv7) codiert einen Unix-Zeitstempel in Millisekunden in den wichtigsten 48 Bit, während die verbleibenden 74 Bit zufällig erzeugt werden
  • Buildkite hat beschlossen, UUIDv7 als Primärschlüssel für alle neuen Tabellen zu verwenden, wodurch die Notwendigkeit einer Koordination bei der Erzeugung von Kennungen entfällt und die Anwendungslogik vereinfacht wird
  • Alternativen wie Instagrams ShardingID-Implementierung und Shopifys Implementierung zusammengesetzter Primärschlüssel wurden geprüft, das Team entschied sich jedoch für UUIDv7
  • Die Umstellung auf UUIDv7 erfordert aufgrund der Länge von 128 Bit zusätzlichen Speicherplatz, dieser ist jedoch im Vergleich zum übrigen Speicherbedarf einer Datenbankzeile gering
  • Derzeit wird die größte Postgres-Datenbank geshardet, und falls nötig könnte künftig UUIDv8 verwendet werden, um die Shard-Nummer in die Kennung aufzunehmen

1 Kommentare

 
GN⁺ 2023-10-03
Hacker-News-Kommentare
  • UUIDv7 ist aufgrund seiner sortierbaren Schlüssel für interne verteilte Systeme nützlich, eignet sich wegen potenzieller Sicherheitsprobleme jedoch möglicherweise nicht als öffentliche Kennung.
  • Zwar wird behauptet, zufällige IDs seien schlecht für die Performance, tatsächlich sind sie für verteilte Speichersysteme aber besser, weil sie Hotspots auf einzelnen Nodes verhindern.
  • Es gibt mehrere UUID-Versionen, weil sich die Anforderungen an Kennungen und die gewünschten Eigenschaften verändern.
  • UUIDv7 kombiniert die Vorteile sequenzieller Primärschlüssel für effiziente Indizierung mit einem sekundären UUID-Schlüssel für die externe Nutzung.
  • Ein mögliches Problem von UUIDv7 ist, dass Benutzer aus der ID den Erstellungszeitpunkt ableiten können.
  • Eine Open-Source-Funktion für UUID v7 in PostgreSQL wurde veröffentlicht und bietet Vorteile wie schnellere Batch-Inserts.
  • UUIDv7 kann mit dem Postgres-Typ uuid verwendet werden, der alle Daten mit der korrekten Länge akzeptiert.
  • Manche bevorzugen einen sequenziellen 64-Bit-Primärschlüssel und zusätzlich einen zufälligen 64-Bit-Schlüssel für die externe Nutzung, um Informationen über Datengröße und Erstellungsdatum zu verbergen.
  • UUIDs sind nützlich, um Schlüssel aus vielen getrennten Quellen zu erzeugen, die später zusammengeführt werden müssen.
  • Es gibt eine Debatte darüber, ob GUIDs/UUIDs „validiert“ werden müssen; sie werden oft als opake Kennungen behandelt.
  • Die Wahl zwischen UUIDv7 und ULIDs hängt von den konkreten Anforderungen ab; ULIDs bieten 6 Bit zusätzliche Zufälligkeit gegenüber dem Metadatenanteil von UUIDs.