Skąd się biorą przestrzenie nazw UUID?
Specyfikacja uuid definiuje 4 predefiniowane przestrzenie nazw, które opisuje jako "potencjalnie interesujące" - co oznacza między innymi: "jeśli inni ludzie wygenerowali uuid w tej przestrzeni nazw, możesz je zweryfikować":
-
6ba7b810-9dad-11d1-80b4-00c04fd430c8
dla DNS -
6ba7b811-9dad-11d1-80b4-00c04fd430c8
dla URL -
6ba7b812-9dad-11d1-80b4-00c04fd430c8
dla ISO OID -
6ba7b814-9dad-11d1-80b4-00c04fd430c8
dla X. 500 DN
Konkretnie;
- jeśli generuję własną przestrzeń nazw UUID Czy muszę unikać coś szczególnego?
- wiem, jak duża jest przestrzeń UUID, ale czy ma to jakiś wpływ na kolizje?
- dlaczego wybrali czwarty oktet, aby zwiększyć jako rodzaj uuid 'numer wersji'?
- Czy moje pytania sugerują, że brakuje mi czegoś fundamentalnego w uuid?
2 answers
Po pierwsze, żeby było jasne, cała dyskusja jest ograniczona do wersji 3 i 5 uuid. W moim (anegdotycznym) doświadczeniu, wersja 4 (losowe) uuid są najczęściej używane.
4122'algorytm generowania UUID w przestrzeni nazw zaczyna się niejednoznacznie:
Przydziel UUID do użycia jako"ID przestrzeni nazw"
Nie ma innej wzmianki o alokacji "name space ID" i Ani ja, ani python nie znalazłem żadnych standardowych spacji poza czterema wymienionymi w RFC 4122.
Więc odpowiedź na twoje pierwsze pytanie,
- jeśli generuję własną przestrzeń nazw UUID, Czy muszę unikać czegokolwiek konkretnego?
Musisz tylko unikać czterech standardowych przestrzeni nazw.
Następne pytanie,
- wiem, jak duża jest przestrzeń UUID, ale czy ma to jakiś wpływ na kolizje?
Składa się z dwóch części:
-
Czy uuid w Twojej przestrzeni nazw zderzenie? Verbatim od 4122:
Uuid generowane z dwóch różnych nazw w przestrzeni nazw [your] powinny być różne (z bardzo dużym prawdopodobieństwem).
-
Czy UUID Twojej przestrzeni nazw zderzy się z innymi przestrzeniami nazw? Nie mogłem znaleźć bezpośredniej odpowiedzi, ponieważ nie ma standardu alokacji "ID przestrzeni nazw", ale argument w sekcja 4.1.1 wydaje się istotny:
Interoperacyjność, w dowolnej formie, z wariantami innymi niż zdefiniowany tutaj nie jest gwarantowany i prawdopodobnie nie będzie problemem w praktyka.
To trochę zagadka. Na szczęście mamy specyfikację uuid, więc możemy je wydobyć, aby uzyskać wgląd.
- dlaczego wybrali czwarty oktet, aby zwiększyć jako rodzaj uuid 'numer wersji'?
Zauważ, że (0-indeks) ósmy oktet zaczyna się od 8
we wszystkich przypadkach, więc mamy do czynienia z wariantem RFC 4122 uuid. UFF.
Teraz sprawdź oktet 6 dla wersji: 1
, mamy do czynienia z Wersja 1 oparte na czasie uuid.
Ta odpowiedź ma poręczny algorytm do wydobywania danych Pythona z uuid wersji 1. Zastosowanie algorytmu daje czas w 4 lutego 1998. Jeszcze nie znalazłem sensu w tej dacie. Inkrementacja trzeciego oktetu dodaje najmniejszy enkodowalny przedział czasu (100ns) do daty.
Nie. Jest bardzo mało dyskusji na temat przestrzeni nazw UUID, ponieważ losowe uuid są tak proste.
- Czy moje pytania sugerują, że jestem brakuje czegoś fundamentalnego w uuid?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:09:08
Nie. UUID Twojej przestrzeni nazw może być dowolnym uuid wygenerowanym na dowolny z normalnych sposobów. Tak więc, na przykład, prawdopodobnie chcesz wygenerować UUID w wersji 1 lub wersji 4, Aby używać go jako przestrzeni nazw UUID. Można to zrobić za pomocą programuJeśli generuję własną przestrzeń nazw UUID, Czy muszę unikać czegokolwiek konkretnego?
uuidgen
na Linuksie lub OS X. można też łatwo wygenerować w wersji 1lub w wersji 4 UUID online.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-10 00:54:49