- 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
Hacker-News-Kommentare
uuidverwendet werden, der alle Daten mit der korrekten Länge akzeptiert.