Ab 4D 20 R10 werden UUIDs nun direkt mit einem internen Algorithmus generiert, anstatt sich auf Systemfunktionen zu stützen – so haben Sie bessere Kontrolle über ihr Format und Verhalten. Und mit diesem Update können Sie sich jetzt für UUIDs der Version 7 entscheiden, die eine chronologische Sortierung unterstützen. Sehen wir uns an, was dies für Ihre Anwendungen bedeutet.
Verständnis der UUID-Versionen
Alle UUIDs haben das gleiche Format: 128 Bits, dargestellt durch 32 hexadezimale Zeichen (0-9 + A-F). Sie können jedoch unterschiedliche Arten von Informationen kodieren. Im RFC 9562 sind derzeit acht UUID-Versionen definiert. Intern wird eine UUID in zwei 64-Bit-Ganzzahlen gespeichert, was Vergleiche, Abfragen und Sortierungen auf 64-Bit-CPUs extrem effizient macht. Hexadezimale Zeichen sind nur ein Anzeigeformat und werden intern überhaupt nicht verwendet.
Bis jetzt war 4D auf Systemfunktionen angewiesen, um UUIDs zu erzeugen. Diese Funktionen erlaubten es nicht zu wählen oder zu wissen, welche Version verwendet wurde. In der Praxis erzeugten sie in der Regel UUIDs der Version 4 – völlig zufällig.
Mit der jüngsten Entwicklung des RFC wurde die Version 7 eingeführt. Sie enthält einen Zeitstempel, so dass UUIDs nach der Erstellungszeit sortiert werden können. Viele von Ihnen haben im 4D Feature Request Forum um Unterstützung für UUIDv7 gebeten, und wir freuen uns, dass wir sie in 4D 20 R10 bereitstellen können!
Version 4 immer noch als Standard
Um Konsistenz und Kompatibilität zu gewährleisten, verwendet 4D weiterhin standardmäßig UUIDs der Version 4. Allerdings verlässt sich 4D nicht mehr auf Systemfunktionen, um UUIDs zu erzeugen, sondern berechnet sie nun intern. Dies hilft, unerwartete Änderungen durch zukünftige System-Updates zu vermeiden.
Und wenn Sie die Vorteile der chronologischen Sortierung in Version 7 nutzen möchten, können Sie diese nun aktivieren – entweder über die Einstellungen oder über den Code.
Was ist das Besondere an Version 7?
Die UUIDs der Version 7 beginnen mit einem Zeitstempel der Unix-Epoche, so dass sie chronologisch sortiert werden können. Dies ist vor allem bei der Entwicklung oder beim Debugging nützlich, wenn Sie möchten, dass neu erstellte Datensätze oben (oder unten) in einem Listenfeld erscheinen.
Da Version 7 mit Mikrosekundengenauigkeit arbeitet, bietet sie eine feinere Granularität als der traditionelle Timestamp Befehl, der auf Millisekunden begrenzt ist.
Hinweis: Wenn mehrere Datensätze innerhalb derselben Mikrosekunde erstellt werden, teilen sie sich denselben Zeitstempelteil. Ihre UUIDs sind jedoch dank zusätzlicher Zufallsbytes weiterhin eindeutig. Eine Sortierung dieser spezifischen Datensätze ist möglicherweise nicht sinnvoll, aber eine Sortierung zusammen mit anderen Datensätzen ist nützlich. In der Praxis dauert die Erstellung von Datensätzen in der Regel länger als eine Mikrosekunde, so dass dieser Grenzfall selten auftritt.
Neue Einstellung für Version 7 Auto-UUIDs
Die Aktivierung von Version 7 für automatisch generierte UUIDs ist einfach. Öffnen Sie einfach den Dialog Struktureinstellungen, gehen Sie zur Seite Datenbank > Datenspeicherung und wählen Sie die gewünschte UUID-Version aus.

Sobald die Version 7 aktiviert ist, werden alle automatisch generierten UUIDs – z. B. die für Primärschlüssel verwendeten – dem neuen Format entsprechen.
Bestehende UUIDs in Ihrer Datenbank bleiben unberührt, um die Konsistenz zu wahren. Und da der Unterschied zwischen Version 4 und 7 intern (nicht strukturell) ist, können beide Formate ohne Probleme nebeneinander bestehen.
Generieren von UUIDs der Version 7 in Code
Der Generate UUID Befehl wurde ebenfalls aktualisiert, um Version 7 zu unterstützen. Sie müssen lediglich die Version als Parameter angeben! Sehr einfach, nicht wahr?
Und wenn der Parameter fehlt, wird standardmäßig immer noch die Version 4 verwendet, damit Ihr Code konsistent bleibt.
var $uuid : Text
$uuid :=Generate UUID // v4: 578BFEC987BD4C11AE8AB9CD3DC12DD0
$uuid :=Generate UUID(4) // v4: C2BE4B6723634DBE9F4387B1226A4B4F
$uuid :=Generate UUID(7) // v7: 0198C7A4E41A7B6CB39F460873165D30
$uuid :=Generate UUID(7) // v7: 0198C7A543557F89AA7D83563AB5C97E
Hier ist ein schneller Vergleich der obigen Ergebnisse:
- Die UUIDs der Version 4 sind völlig zufällig.
- Die UUIDs der Version 7 haben ein gemeinsames Präfix (Zeitstempel) mit Zufälligkeit am Ende.
Wir hoffen, dass diese neue Funktion Ihnen mehr Flexibilität und Kontrolle über Ihre Entwicklungen gibt. Wie immer hören wir auf Ihr Feedback und entwickeln 4D weiter, um Ihre Bedürfnisse zu erfüllen.
Viel Spaß beim Programmieren!
