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
Skąd one się wzięły?

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?
Author: Matt Ball, 2011-10-11

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:

  1. 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).

  2. 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.


  • dlaczego wybrali czwarty oktet, aby zwiększyć jako rodzaj uuid 'numer wersji'?
To trochę zagadka. Na szczęście mamy specyfikację uuid, więc możemy je wydobyć, aby uzyskać wgląd.

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.


  • Czy moje pytania sugerują, że jestem brakuje czegoś fundamentalnego w uuid?
Nie. Jest bardzo mało dyskusji na temat przestrzeni nazw UUID, ponieważ losowe uuid są tak proste.
 42
Author: hurrymaplelad,
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

Jeśli generuję własną przestrzeń nazw UUID, Czy muszę unikać czegokolwiek konkretnego?

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ą programu uuidgen na Linuksie lub OS X. można też łatwo wygenerować w wersji 1lub w wersji 4 UUID online.
 2
Author: user31708,
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