UUID vs. NanoID
Beide erzeugen Bezeichner, die ohne zentrale Instanz eindeutig bleiben. UUIDs sind der Standard: 36 Zeichen, RFC 9562, in jede Laufzeitumgebung und Datenbank eingebaut. NanoIDs sind die kompakte Alternative – 21 URL-sichere Zeichen mit vergleichbarer Entropie. Bleiben Sie für Schlüssel und Infrastruktur bei UUIDs; greifen Sie zu NanoID, wenn die ID in URLs auftaucht.
UUID vs. NanoID erklärt
Jedes verteilte System braucht Bezeichner, die zwei Maschinen im selben Moment erzeugen können, ohne einander zu fragen. UUIDs lösten das in den 1980ern, standardisiert als RFC 4122 und 2024 als RFC 9562 überarbeitet; NanoID kam 2017 als minimale Bibliothek auf die Jagd nach kürzeren Zeichenketten. Beide sind nach derselben Mathematik kollisionsfrei – reichlich zufällige Bits – und keiner braucht einen Koordinationsserver.
Eine UUID ist 128 Bit, dargestellt als 36 Zeichen: 32 Hex-Ziffern im Muster 8-4-4-4-12, sechs davon für Versions- und Varianten-Marker verbraucht, sodass Version 4 122 zufällige Bits trägt. Ein NanoID im Standardformat besteht aus 21 Zeichen aus A-Za-z0-9_- – 64 Symbole mit je 6 Bit, 126 zufällige Bits, über crypto.getRandomValues. Verschiedene Formen, ein Kollisionsplateau.
Die echten Unterschiede sind operativer Natur: wer jede Form erzeugen und validieren kann, wie sich die IDs in Datenbankindizes verhalten, wie sie in einer URL aussehen und wie umkehrbar die Wahl ist – alles unten gemessen, mit einem lokalen Generator, der durchgehend verlinkt ist, um echte Ausgaben zu vergleichen.
Sie möchten beide Formen in echter Ausgabe sehen? Der UUID-Generator läuft vollständig in Ihrem Browser – crypto.getRandomValues, keine Netzwerkaufrufe, nichts wird protokolliert.
Für die komplette Tour durch das, was jede Version kodiert, erläutert der Leitfaden zu den UUID-Versionen v1 bis v8 mit durchgerechneten Beispielen.
Anatomie: was in jeder ID steckt
UUIDs kodieren ihre eigenen Metadaten. Die Bits 48–51 tragen die Version – 1 für Zeit plus MAC, 4 für zufällig, 7 für zeitgeordnet zufällig – und zwei weitere Bits legen die Variante fest. Eine v4 sieht immer zufällig aus; eine v7 beginnt mit einem lesbaren Zeitstempel, weil ihre ersten 48 Bits Millisekunden seit der Unix-Epoche sind und UUIDs, die am selben Tag geprägt wurden, ein gemeinsames Präfix teilen.
NanoIDs tragen keine Metadaten. Jedes Zeichen ist ein unabhängiger Zug aus dem Alphabet, gewählt mit Maskierung und Reject Sampling über crypto.getRandomValues, sodass jedes Symbol gleichwahrscheinlich bleibt. Diese Reinheit ist der Grund, warum das Format flexibel ist – Alphabet oder Länge ändern, Algorithmus behalten – und warum ein NanoID nichts darüber verrät, wann er erzeugt wurde.
| Aspekt | UUID | NanoID |
|---|---|---|
| Maßgebliche Spezifikation | RFC 9562 (2024, vormals RFC 4122) | Bibliothekskonvention (nanoid) – kein RFC |
| Standardgröße | 36 Zeichen, 128 Bit | 21 Zeichen, 126 Bit |
| Alphabet | 0-9a-f plus 4 Bindestriche | A-Za-z0-9_- (64 Symbole) |
| Zufallsquelle | CSPRNG; crypto.randomUUID() | crypto.getRandomValues mit Maskierung |
| Eingebetteter Zeitstempel | v1 und v7 ja; v4 keiner | Keiner – absichtlich opak |
| Nutzbare Entropie | 122 Bit (v4); 74 zufällige Bits in v7 | 126 Bit bei 21 Zeichen |
Kollisionsrechnung: warum keiner von beiden jemals kollidiert
Die Geburtstagsformel sagt, dass ein n-Bit-Zufallsbezeichner bei etwa 2^(n/2) Zügen eine Kollisionswahrscheinlichkeit von 50 Prozent erreicht. Für UUID v4 sind das rund 2^61 – etwa 2,3 Trillionen IDs –, bevor die Chancen eines einzigen Duplikats die Hälfte erreichen; NanoIDs 126 Bits schieben die Latte noch etwas höher. In der Praxis sind beide Systeme, bei denen es nie passiert – jedes Duplikat, dem Sie begegnen, ist ein Codefehler, kein Entropie-Ereignis.
Diese Gleichwertigkeit ist der Grund, warum die Größen-Debatte weniger wichtig ist als angenommen: 21 NanoID-Zeichen sind nicht sicherer als eine v4-UUID – dieselbe Garantie in weniger Bytes. Die ehrlichen Gründe für die Wahl sind operative Passung – Speicherplatz, URLs, Tooling –, nicht das Kollisionsrisiko.
Datenbanken: das Problem der Index-Lokalität
Fügen Sie einen zufälligen Schlüssel in einen B-Tree-Index ein, kann die Zeile auf jeder beliebigen Seite landen; füllen Sie Seiten zur Hälfte in zufälliger Reihenfolge, riskiert jeder Einfügevorgang eine Seitenaufteilung, zusätzliche Schreibvorgänge und einen kälteren Cache. Das ist die Fragmentierungs-Steuer, die sowohl UUID v4 als auch NanoID zahlen – NanoID eingeschlossen, denn es ist genauso zufällig. Auf einem indizierten Primärschlüssel bei schreiblastiger Last ist keiner von beiden standardmäßig indexfreundlich.
UUID v7 ist die Korrektur, die der Standard selbst mitliefert: Ihre führenden 48 Bits sind ein Millisekunden-Zeitstempel, daher sortieren neue Schlüssel fast immer an den rechten Rand des Index. NanoID kann das nicht bieten: keine Zeitkomponente, nichts zum Sortieren. In einer indizierten Spalte ist die echte Wahl v7 gegen alles andere.
- v4 und NanoID verteilen Einfügevorgänge über den ganzen Baum – Seitenaufteilungen und Cache-Misses bei Skalierung.
- Postgres' uuid-Typ speichert 16 rohe Bytes; ein 36-Zeichen-Textschlüssel speichert 37 oder mehr.
- NanoIDs Textvorteil – 21 Zeichen gegenüber 36 – hält nur, solange das Alphabet dokumentiert bleibt.
URLs, Alphabete und der Längen-Regler
NanoIDs Alphabet ist von Konstruktion her URL-sicher: A-Za-z0-9_- braucht nirgendwo in einer URL Prozent-Kodierung, also kann eine ID ein Pfadsegment, ein Query-Wert oder ein Slug ohne jede Escapung sein. UUIDs sind technisch ebenfalls URL-sicher – Hex-Ziffern und Bindestriche brauchen nie eine Kodierung –, aber 36 Zeichen sind viel sichtbarer String für einen Link.
Das eigene Alphabet ist NanoIDs praktischstes Feature: nur Ziffern, Kurzlinks in Kleinschreibung – die 64 Symbole austauschen, den Algorithmus behalten. Beachten Sie die Regel, dass Entropie Länge mal log2 der Alphabetgröße ist: Ein NanoID mit 8 Zeichen in Kleinschreibung hat etwa 38 Bit, gut für einen Ein-Stunden-Code, fahrlässig als Primärschlüssel. UUIDs bieten einen solchen Regler nicht; das Format ist auf 128 Bit fixiert.
Wann Sie was wählen
Wählen Sie UUIDs, wenn die ID in Infrastruktur lebt: Datenbank-Primärschlüssel (v7), Austausch zwischen Teams und Anbietern, alles, was ein Dritter validieren muss, überall dort, wo eine eingebaute Lösung eine Abhängigkeit schlägt. Der Standard ist das Produkt – jede Sprache, jedes ORM und jede Datenbank spricht ihn bereits.
Wählen Sie NanoID, wenn die ID für Nutzer sichtbar ist: kurze URLs, Einladungslinks, Dateinamen, Cookie-Werte, Request-IDs in Logs. Die Empfehlung kehrt sich sauber um – wenn Sie permanent gegen die Breite einer UUID in einer URL ankämpfen, will dieser Link NanoID; wenn Sie sich dabei ertappen, NanoID in einem Backend neu zu implementieren, dessen Datenbank Schlüssel nativ liefern könnte, will diese Spalte eine v7-UUID.
Häufig gestellte Fragen
Kann ich hier UUIDs oder NanoIDs erzeugen, ohne dass etwas an einen Server gesendet wird?
Ja. Der Generator läuft in Ihrem Tab und nutzt crypto.getRandomValues des Browsers selbst, und kein Request verlässt die Seite – die Content-Security-Policy der Website blockiert ausgehende Aufrufe. Öffnen Sie bei der Erzeugung den Netzwerk-Tab der DevTools und beobachten Sie, wie er still bleibt. Die Zufälligkeit kommt über den Browser aus Ihrem Betriebssystem, daher entspricht die Qualität der serverseitigen Erzeugung.
Sind NanoIDs so kollisionssicher wie UUID v4?
Rein nach Bits sogar etwas mehr: 126 gegenüber 122 bei v4. Der 50-Prozent-Kollisionspunkt liegt etwas jenseits von 2^61 Zügen (rund 2,3 Trillionen IDs bei v4), weit jenseits jedes realistischen Volumens. Denkbar wird der Abstand erst, wenn Sie die Länge oder das Alphabet von NanoID verkleinern.
Sollte ich NanoID als Datenbank-Primärschlüssel verwenden?
Das geht – aber ein 21-Zeichen-Textschlüssel ist genauso zufällig wie v4 und erbt daher dieselbe B-Tree-Fragmentierung auf schreiblastigen Tabellen. Wenn Einfügevorgänge heiß laufen, ist UUID v7 – zeitgeordnet – die indexfreundliche Wahl. NanoID kauft kürzere Strings, keine Index-Lokalität.
Ist NanoID ein Standard wie UUID?
Nein. UUID ist RFC 9562 mit nativer Unterstützung in jeder Sprache, im uuid-Typ von Postgres und in crypto.randomUUID(). NanoID ist eine Bibliothekskonvention: klein genug, um sie in Minuten neu zu implementieren, aber jeder Erzeuger und Verbraucher muss sich über Alphabet und Länge einig sein, und nichts prüft die Konformität. Diese Abstimmung ist der Preis der 15 gesparten Zeichen.
Warum wird UUID v7 gegenüber v1 empfohlen?
Das node-Feld von v1 trägt die MAC-Adresse der Maschine, was Hardware-Identität verrät und IDs systemübergreifend verknüpft, und sein gregorianischer Zeitstempel in 100-Nanosekunden-Schritten sortiert umständlich gegenüber Unix-Zeit-Tooling. v7 ersetzt beides durch 48 Bit Unix-Millisekunden plus zufällige Bits: zeitsortierbar, datenschutzneutral, derselbe RFC. Beginnen Sie neue Entwürfe mit v7 oder v4.
Wie kurz darf ein NanoID werden, bevor Kollisionen eine Rolle spielen?
Entropie ist Zeichen mal log2 der Alphabetgröße; halbieren Sie den Exponenten für die Geburtstagsgrenze. Die 21 Standardzeichen sind 126 Bit. Zwölf Zeichen sind 72 Bit, etwa 2^36 Züge bis zum Münzwurf – pro Nutzer fein, für eine globale Tabelle dünn. Acht sind rund 48 Bit: kurzlebige Codes, niemals Primärschlüssel.
Wo kann ich die hier zitierten Standards nachlesen?
Welche verwandten Tools sollten Sie als Nächstes nutzen?
- UUID generierenv4-, v7- und v1-UUIDs in Serie erzeugen und vorhandene prüfenÖffnen
- UUID-VersionenLeitfaden in verständlicher SpracheÖffnen
- GeneratorenKennungen, Platzhaltertexte und Codes.Öffnen
- Wie funktioniert Base64Leitfaden in verständlicher SpracheÖffnen
- JWT vs. Session-TokensDirekter VergleichÖffnen
- JSON formatierenEinrückung und Sortierung einstellen, Kommentare entfernenÖffnen