Discussion:
Jaki jest algorytm generowaniu wartosci GUUID ?
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Sowiecki Agent
2007-09-24 08:07:27 UTC
Permalink
WItam!
Jaki jest algorytm generowania wartosci guuid? Czy jest zalezny od
aktualnego czasu ( z sekundami) ? Chodzi mi konkretnie o MS sql server.
Chcialbym zrobic export pewnej czesci rekordow i wlasnie z tymi wartosciami
(ze wzgledu na liczne powiazania) a mam pewne obawy co do tego czy na dwoch
roznych komputerach z mssql server nie wsytapia te same wartosci.
Jak rozumiem server nie sprawdza przed wygeneroaniem nowego 'numeru' czy taki
juz istnieje w jakimklwiek rekordzie? (za dlugo by to chyba trwalo).

Pozdrawiam
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Szymon
2007-09-24 08:29:02 UTC
Permalink
Post by Sowiecki Agent
WItam!
Jaki jest algorytm generowania wartosci guuid? Czy jest zalezny od
aktualnego czasu ( z sekundami) ? Chodzi mi konkretnie o MS sql server.
Chcialbym zrobic export pewnej czesci rekordow i wlasnie z tymi wartosciami
(ze wzgledu na liczne powiazania) a mam pewne obawy co do tego czy na dwoch
roznych komputerach z mssql server nie wsytapia te same wartosci.
Jak rozumiem server nie sprawdza przed wygeneroaniem nowego 'numeru' czy taki
juz istnieje w jakimklwiek rekordzie? (za dlugo by to chyba trwalo).
Pozdrawiam
GUUID jest takim pseudolosowym ciągiem, który może się powtarzać. Jest
sobie RFC 4122 w którym opisano UUID, z tego co pamiętam to GUID jest
tylko innym sposobem na to samo, tylko lepszym, bo opracowanym przez M$
:). Teoretycznie możesz mieć sytuację w której powtórzy Ci się ten sam
GUID/UUID na różnych maszynach, więc weź to pod uwagę jak będziesz to
używać, bo wcale nie jest tak jak większość uważa, że UUID jest unikalny.
wloochacz
2007-09-24 08:48:07 UTC
Permalink
Post by Sowiecki Agent
WItam!
Jaki jest algorytm generowania wartosci guuid? Czy jest zalezny od
aktualnego czasu ( z sekundami) ?
Tak;
http://pl.wikipedia.org/wiki/GUID
Post by Sowiecki Agent
Chodzi mi konkretnie o MS sql server.
Chcialbym zrobic export pewnej czesci rekordow i wlasnie z tymi wartosciami
(ze wzgledu na liczne powiazania) a mam pewne obawy co do tego czy na dwoch
roznych komputerach z mssql server nie wsytapia te same wartosci.
Jak rozumiem server nie sprawdza przed wygeneroaniem nowego 'numeru' czy taki
juz istnieje w jakimklwiek rekordzie? (za dlugo by to chyba trwalo).
Sprawdzenie to sobie sam musisz zrobić, ale te wartości "raczej" na
pewno nie powinny się powtórzyć. Przynajmniej ja się z czymś takim nie
spotkałem.
--
wloochacz
Szymon
2007-09-24 08:53:11 UTC
Permalink
Post by wloochacz
Post by Sowiecki Agent
WItam!
Jaki jest algorytm generowania wartosci guuid? Czy jest zalezny od
aktualnego czasu ( z sekundami) ?
Tak;
http://pl.wikipedia.org/wiki/GUID
Post by Sowiecki Agent
Chodzi mi konkretnie o MS sql server.
Chcialbym zrobic export pewnej czesci rekordow i wlasnie z tymi wartosciami
(ze wzgledu na liczne powiazania) a mam pewne obawy co do tego czy na dwoch
roznych komputerach z mssql server nie wsytapia te same wartosci.
Jak rozumiem server nie sprawdza przed wygeneroaniem nowego 'numeru' czy taki
juz istnieje w jakimklwiek rekordzie? (za dlugo by to chyba trwalo).
Sprawdzenie to sobie sam musisz zrobić, ale te wartości "raczej" na
pewno nie powinny się powtórzyć. Przynajmniej ja się z czymś takim nie
spotkałem.
Mnie najbardziej rozwala jak np. w systemie bankowym potrafili zrobić
UUIDy jako indentyfikatory obiektów, bo to przecież "raczej" się nie
powtórzy. Równie dobrze mogli robić md5(aktualny czas) i też "raczej"
się nie powtórzy. Gorzej jak się powtórzy, a zarówno md5 jak i UUID mogą
się powtórzyć, nawet muszą, bo jest tam ograniczona liczba bajtów, poza
tym sam sposób generowania UUIDa wcale nie zabezpiecza przed takimi
powtórkami.
Artur Muszyński
2007-09-24 09:09:51 UTC
Permalink
Post by Szymon
Mnie najbardziej rozwala jak np. w systemie bankowym potrafili zrobić
UUIDy jako indentyfikatory obiektów, bo to przecież "raczej" się nie
powtórzy. Równie dobrze mogli robić md5(aktualny czas) i też "raczej"
się nie powtórzy. Gorzej jak się powtórzy, a zarówno md5 jak i UUID mogą
się powtórzyć, nawet muszą, bo jest tam ograniczona liczba bajtów, poza
tym sam sposób generowania UUIDa wcale nie zabezpiecza przed takimi
powtórkami.
Mieszasz. Nazwa wskazuje, że ten identyfikator ma być globalnie
niepowtarzalny i algorytm powinien robić wszystko, żeby to było prawdą.
Statystycznie rzecz biorąc tak właśnie jest. Znacznie bardziej
prawdopodobne jest, że na ten twój bank spadnie meteoryt rozwalając
wszystkie serwery niż to, że doświadczysz kiedykolwiek tego problemu.
Nt MD5 się nie wypowiadam, bo ten algorytm ma służyć zupełnie innym celom.

artur
Szymon
2007-09-24 09:32:30 UTC
Permalink
Post by Artur Muszyński
Post by Szymon
Mnie najbardziej rozwala jak np. w systemie bankowym potrafili zrobić
UUIDy jako indentyfikatory obiektów, bo to przecież "raczej" się nie
powtórzy. Równie dobrze mogli robić md5(aktualny czas) i też "raczej"
się nie powtórzy. Gorzej jak się powtórzy, a zarówno md5 jak i UUID mogą
się powtórzyć, nawet muszą, bo jest tam ograniczona liczba bajtów, poza
tym sam sposób generowania UUIDa wcale nie zabezpiecza przed takimi
powtórkami.
Mieszasz. Nazwa wskazuje, że ten identyfikator ma być globalnie
niepowtarzalny i algorytm powinien robić wszystko, żeby to było prawdą.
Statystycznie rzecz biorąc tak właśnie jest. Znacznie bardziej
prawdopodobne jest, że na ten twój bank spadnie meteoryt rozwalając
wszystkie serwery niż to, że doświadczysz kiedykolwiek tego problemu.
Niezupełnie tak jest. Algorytm przewiduje, że nie potrzebuje centralnego
systemu przydzielania numerów a mimo to będzie generował unikalne
numery, a to jest g*** prawda. Poczytaj to RFC to się przekonasz.
Algorytm bazuje na generowaniu numeru na podstawie czasu, kilku losowych
pierdół i adresu MAC, który można zmienić, albo komputer może go nie
mieć. Jak go nie ma, to RFC zaleca zakupienie sobie puli adresów za $50.
Czyli masz centralny system przydzielania guidów/uuidów, więc to, że on
będzie unikalny przy jednoczesnym generowaniu na wielu komputerach można
sobie między bajki wsadzić.
Mi się kiedyś zdarzyło, że firma w której pracowałem kupiła jakieś
biblioteki w postaci obiektów COM, które mają swoje GUIDy. Te obiekty
się zarejestrowały, a potem mój interfejs przypadkiem dostał taki sam
numer GUID jak jeden z tych obiektów i było wesoło.
Powtarzalność tych numerów to nie jest problem. Problemem jest
oprogramowanie i programiści, którym się wydaje, że te numery nigdy się
nie powtórzą, bo nie i już i nie przewidują takiej możliwości w swoim
oprogramowaniu, a gdy te numery się powtórzą to wtedy zaczyna się robić
problem. Adresy MAC też nie powinny się powtarzać, a widziałem karty
sieciowe z takimi samymi adresami i bez możliwości ich zmiany i sieć
miała problemy. Takie same problemy może mieć każdy system informatyczny
w którym bezgranicznie wierzy się w to, że numery uuid się nie
powtarzają i są unikalne.
Artur Muszyński
2007-09-25 08:39:35 UTC
Permalink
Post by Szymon
Mi się kiedyś zdarzyło, że firma w której pracowałem kupiła jakieś
biblioteki w postaci obiektów COM, które mają swoje GUIDy. Te obiekty
się zarejestrowały, a potem mój interfejs przypadkiem dostał taki sam
numer GUID jak jeden z tych obiektów i było wesoło.
Access konwertował INT na GUID po najmniejszej linii oporu uzupełniając
zerami. GUID'y przydzielane dla COM też nie zawsze są zupełnie
przypadkowe. Algortymy (nie ma jednego, każda implementacja robi to ciut
inaczej) też pozostawiają wątpliwości. Nie mniej GUID w przypadku
opisanym przez pytającego należy traktować jako wartość unikalną i
najwyżej (ze znikomo małym prawdopodobieństwem) import spowoduje
naruszenie więzów integralności i wtedy będzie się martwił, co dalej robić.

artur

wloochacz
2007-09-24 09:14:22 UTC
Permalink
[ciach]
Post by Szymon
Mnie najbardziej rozwala jak np. w systemie bankowym potrafili zrobić
UUIDy jako indentyfikatory obiektów, bo to przecież "raczej" się nie
powtórzy. Równie dobrze mogli robić md5(aktualny czas) i też "raczej"
się nie powtórzy.
Nie; GUID/UUID ma "trochę" bardziej wysublimowany algorytm generowania
jak MDpiątka z daty_i_czasu....
Post by Szymon
Gorzej jak się powtórzy, a zarówno md5 jak i UUID mogą
się powtórzyć, nawet muszą, bo jest tam ograniczona liczba bajtów, poza
tym sam sposób generowania UUIDa wcale nie zabezpiecza przed takimi
powtórkami.
Teoretycznie, może się powtórzyć. Teoretycznie szóstka w totka też jest
możliwa, a nawet niektórym się udało trafić. Mi niestety się nie udało
trafić szóstki ani powtórzyć GUID'a ;-)
--
wloochacz
Loading...