kzen.dev
  • Întrebări
  • Tag-uri
  • Utilizatori
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 dlinsin
dlinsin
Question

Probabilitatea de coliziune folosind cele mai semnificative biți de un UUID în Java

Dacă am'm, folosind Mult uuid = UUID.randomUUID().getMostSignificantBits()` cât este de probabil pentru a obține o coliziune. Se taie puțin semnificativi biți, astfel încât nu există o posibilitate ca tu a alerga într-o coliziune, nu?

232 2008-11-28T10:24:18+00:00 5
 lospejos
lospejos
Întrebarea editată 3 februarie 2019 в 3:42
Programare
collision
java
uuid
Solution / Answer
Rasmus Faber
Rasmus Faber
28 noiembrie 2008 в 10:37
2008-11-28T10:37:27+00:00
Mai mult
Sursă
Editează
#8661058

Potrivit documentatiei]1, metoda statică UUID.randomUUID() generează un tip de 4 UUID.

Acest lucru înseamnă că șase biți sunt utilizate pentru un anumit tip de informații și restul de 122 de biți sunt atribuite în mod aleatoriu.

Cele șase non-aleatoare de biți sunt distribuite cu patru din cele mai importante jumătate de UUID și două în cel mai puțin semnificativ jumătate. Astfel, cele mai semnificative jumătate de UUID-ul contine 60 de bucati de dezordine, ceea ce înseamnă că, în medie, aveți nevoie pentru a genera 2^30 full computer pentru a obține o coliziune (în comparație cu 2^61 pentru întreaga UUID).

Deci, aș spune că sunt destul de în siguranță. Rețineți, totuși, că acest lucru nu este absolut adevărat pentru alte tipuri de Uuid, ca Carl Seleborg mențiuni.

De altfel, ar fi puțin mai bine, cu ajutorul cel mai puțin semnificativ jumătate de UUID (sau doar generarea aleatoare mult timp folosind SecureRandom).

Rasmus Faber
Rasmus Faber
Răspuns editat 17 iulie 2015 в 7:08
211
0
Carl Seleborg
Carl Seleborg
28 noiembrie 2008 в 10:26
2008-11-28T10:26:44+00:00
Mai mult
Sursă
Editează
#8661057

Raymond Chen are un excelent blog post pe acest:

Guid-urile sunt unice la nivel global, dar siruri de Guid-urile sunt't

Rasmus Faber
Rasmus Faber
Răspuns editat 28 noiembrie 2008 в 10:47
54
0
 Kannika
Kannika
15 mai 2012 в 10:02
2012-05-15T10:02:29+00:00
Mai mult
Sursă
Editează
#8661060

Am crede că acest lucru este cel mai bun exemplu pentru utilizarea randomUUID :

http://www.javapractices.com/topic/TopicAction.do?Id=56

13
0
Peter Lawrey
Peter Lawrey
13 martie 2009 в 9:36
2009-03-13T21:36:17+00:00
Mai mult
Sursă
Editează
#8661059

Esti mai bine doar generarea aleatoare de mult valoarea, atunci toți biții sunt aleatoare. În Java 6, new Random() utilizează Sistemul.nanoTime (), plus un contor ca o sămânță.

Există diferite niveluri de unicitate.

Dacă ai nevoie de unicitatea peste multe masini, ai putea avea o bază de date centrală de masă pentru alocarea de id-uri unice, sau chiar de loturi de id-uri unice.

Dacă aveți nevoie doar de a avea unicitatea într-o singură aplicație puteți avea doar un contor (sau un contor care pornește de la currentTimeMillis()*1000 sau nanoTime() în funcție de cerințele dumneavoastră)

10
0
Dr Bob
Dr Bob
3 mai 2013 в 12:31
2013-05-03T00:31:13+00:00
Mai mult
Sursă
Editează
#8661061

Timp de utilizare YYYYDDDD (An + Zi din An) ca prefix. Acest lucru reduce fragmentarea bazei de date în tabele și indecși. Această metodă returnează byte[40]. L-am folosit într-un mediu hibrid în cazul în care Active Directory SID (varbinary(85)) este cheia pentru utilizatori LDAP și o aplicație de auto-generat ID-ul este folosit pentru non-Utilizatori LDAP. De asemenea, numărul mare de tranzacții pe zi, în tranzacționale tabele (Industria Bancară) nu poate folosi standard Int` tipuri de Chei

private static final DecimalFormat timeFormat4 = new DecimalFormat("0000;0000");

public static byte[] getSidWithCalendar() {
    Calendar cal = Calendar.getInstance();
    String val = String.valueOf(cal.get(Calendar.YEAR));
    val += timeFormat4.format(cal.get(Calendar.DAY_OF_YEAR));
    val += UUID.randomUUID().toString().replaceAll("-", "");
    return val.getBytes();
}
 Jesse
Jesse
Răspuns editat 3 mai 2013 в 12:57
7
0
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
Utilizatori
Toate
Nou
Populare
1
Daniel Gogov
Înregistrat 6 zile în urmă
2
工藤 芳則
Înregistrat 1 săptămână în urmă
3
Ирина Беляева
Înregistrat 2 săptămâni în urmă
4
Darya Arsenyeva
Înregistrat 2 săptămâni în urmă
5
anyta nuam-nuam (LapuSiK)
Înregistrat 2 săptămâni în urmă
DE
ES
ID
JA
KO
RO
RU
© kzen.dev 2023
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire