UUID ma wiele wersji, każda z nich ma różne właściwości:
• v1: Oparta na czasie i ID węzła, uporządkowana, ale może ujawniać informacje
• v3: Oparta na nazwie i przestrzeni nazw, używa skrótu MD5
• v4: Całkowicie losowa, najczęściej używana wersja
• v5: Oparta na nazwie i przestrzeni nazw, używa skrótu SHA-1, bezpieczniejsza niż v3
• v6: Ulepszona wersja v1, część czasowa w kolejności big-endian, lepsza do sortowania
• v7: Nowa wersja oparta na znaczniku czasu Unix, łącząca kolejność czasową i losowość
Jak wybrać odpowiednią wersję UUID
Wybierz najbardziej odpowiednią wersję w zależności od scenariusza użycia:
• Potrzebujesz bezpieczeństwa: Wybierz v4 (losowa) lub v5 (nazwa oparta na SHA-1)
• Potrzebujesz sortowania: Wybierz v6 lub v7 (oparte na czasie i łatwe do sortowania)
• Potrzebujesz determinizmu: Wybierz v3 lub v5 (te same wejścia dają te same wyjścia)
• Potrzebujesz wydajności: Wybierz v1 (szybkie generowanie)
• Wartości specjalne: NIL (wszystkie 0) lub MAX (wszystkie F) dla przypadków brzegowych
UUID v4 jest całkowicie losowa, odpowiednia dla większości scenariuszy aplikacji. v3 i v5 są deterministyczne, te same nazwy i przestrzenie nazw zawsze generują ten sam UUID, odpowiednie dla przypadków wymagających spójnego mapowania. v1, v6 i v7 zawierają informacje czasowe, w określonych warunkach mają właściwości sekwencyjne.
Czasowość i sekwencyjność
v1, v6 i v7 zawierają informacje czasowe, ale przetwarzane w różny sposób. v6 poprawia problemy z sortowaniem czasowym v1, v7 używa znacznika czasu Unix, zapewniając prostszą sekwencyjność czasową. Jeśli potrzebujesz UUID sortowanych według czasu generowania, v6 i v7 są lepszym wyborem.
Zagadnienia bezpieczeństwa
v1 może ujawniać czas generowania i informacje o węźle (adres MAC). v4 jest całkowicie losowa, najlepsza dla scenariuszy wrażliwych na prywatność. v3 używa skrótu MD5, mniej bezpiecznego niż SHA-1 używany w v5. NIL i MAX są stałymi wartościami, nie powinny być używane w scenariuszach bezpieczeństwa wymagających unikalności.
UUID są głównie używane w scenariuszach wymagających globalnie unikalnych identyfikatorów: systemy rozproszone, klucze główne baz danych, identyfikatory sesji, nazwy plików, tokeny API itp. Wybór odpowiedniej wersji może zoptymalizować wydajność, bezpieczeństwo i organizację danych.