2012-01-26 10 views
8

Zastanawiam się, czy mogę bezpiecznie zastąpić identyfikatory generowane przez funkcję UUID() mysql za pomocą identyfikatorów generowanych przez funkcję UUID.randomUUID (java) java?mysql UUID() i java UUID.randomUUID()

szukam dzielić te identyfikatory w adresach URL z moich użytkowników, ale UUID mysql() wyjście wygląda bardzo podobnie do siebie po kilku seriach:

3ae2c9c4-47df-11e1-8c2a-a46b34c02a9e 
976de634-47e3-11e1-8c2a-a46b34c02a9e 
530cc5c6-47e7-11e1-8c2a-a46b34c02a9e 
... 

Nie mówię, że oni nie są one unikatowe, ale czy w ten sposób zwykle pojawiają się wyniki UUID()? Przypuszczam, że jest związany z jakimś identyfikatorem na mojej maszynie.

Java UUID.randomUUID() „wyglądać” bardziej losowy:

c042437b-298a-41c4-c2b6-0f83552bdb8b 
e33d8ab7-d9d3-4ffe-a592-650a125d2a93 
ecb12c54-5741-45c8-8b85-1825c19a9cae 
... 

Z mojego naiwnego zrozumienia wyjątkowości, identyfikatory generowane metodą java powinien działać jako idealny zamiennik UUID MySQL()?

(kolejna premia za korzystanie z wersji Java jest to, że nie będę musiał ponownie sprowadzić wstawiony rekord, który używa UUID(), gdy muszę dostarczyć go w odpowiedzi do klienta)

dziękuję

Odpowiedz

9

Czy używasz Linuksa lub FreeBSD? Od MySQL documentation:

numer piąty jest IEEE 802 numer węzła, który zapewnia przestrzenną niepowtarzalność. Numer losowy jest zastępowany, jeśli ten ostatni nie jest dostępny (na przykład, ponieważ komputer hosta nie ma karty Ethernet lub nie wiemy, jak znaleźć adres sprzętowy interfejsu w systemie operacyjnym). W takim przypadku nie można zagwarantować unikalności przestrzennej . Niemniej jednak kolizja powinna mieć bardzo niskie prawdopodobieństwo.

Obecnie adres MAC interfejsu jest brany pod uwagę tylko w przypadku FreeBSD i Linux pod numerem . W innych systemach operacyjnych MySQL używa losowo generowanych 48-bitowych liczb.

pamiętać również:

Warning:

Chociaż UUID() wartości mają być unikalne, nie są one koniecznie unguessable lub nieprzewidywalne. Jeśli nieprzewidywalność jest wymagana, wartości UUID powinny być generowane w inny sposób.

EDIT

Jeśli chcesz identyfikatory użytkowników do pojawiają bardziej losowy, można przekazać je poprzez funkcję mieszającą jak MD5(UUID()), co daje bardziej przekonujący losowy ciąg

+1

jestem na Mac, a ta sprawa będzie działać na komputerze z systemem Windows (...). Zgadywanie nie jest dla mnie problemem, biorąc pod uwagę wzór, który widziałem z mysql UUID() powyżej, domyślam się, że moi użytkownicy po prostu sądzą, że jest w tym coś "dziwnego".Nic więcej, ale premia posiadania UUID z góry w momencie wstawienia, jeśli została wygenerowana za pomocą metody java, przechyla się na moją korzyść w tym kierunku. Dzięki – user291701

Powiązane problemy