Hat jemand Erfahrung zu teilen?
Es gibt 2^122
mögliche Werte für eine Typ-4 UUID. (Die Spezifikation besagt, dass Sie 2 Bits für den Typ und weitere 4 Bits für eine Versionsnummer verlieren.)
Angenommen, Sie würden 1 Million zufällige UUIDs pro Sekunde generieren, wären die Chancen, dass in Ihrem Leben eine Duplikat auftritt, verschwindend gering. Und um das Duplikat zu erkennen, müssten Sie das Problem lösen, 1 Million neue UUIDs pro Sekunde mit _allen zu vergleichen, die Sie zuvor generiert haben_1!
Die Chancen, dass jemand in der Realität ein Duplikat erlebt hat (d.h. es tatsächlich bemerkt hat), sind noch kleiner als verschwindend gering ... wegen der praktischen Schwierigkeit, nach Kollisionen zu suchen.
Natürlich werden Sie in der Regel einen Pseudo-Zufallszahlengenerator verwenden, nicht eine Quelle von wirklich zufälligen Zahlen. Aber ich denke, wir können sicher sein, dass, wenn Sie einen glaubwürdigen Anbieter für Ihre kryptographisch sicheren Zufallszahlen verwenden, dann wird es kryptographische Stärke haben, und die Wahrscheinlichkeit von Wiederholungen wird die gleiche sein wie bei einem idealen (nicht verzerrten) Zufallszahlengenerator.
Wenn Sie jedoch einen JVM mit einem "fehlerhaften" krypto- zufallszahlengenerator verwenden würden, sind alle Wetten abgeschaltet. (Und das könnte auch einige der Workarounds für "Mangel an Entropie" -Probleme auf einigen Systemen einschließen. Oder die Möglichkeit, dass jemand Ihr JRE manipuliert hat, entweder auf Ihrem System oder weiter oben.)
1 - Unter der Annahme, dass Sie "irgendeine Art von binärem btree" verwenden, wie von einem anonymen Kommentator vorgeschlagen, wird jede UUID O(NlogN)
Bits RAM-Speicher benötigen, um N
verschiedene UUIDs bei niedriger Dichte und zufälliger Verteilung der Bits darzustellen. Multiplizieren Sie das jetzt mit 1.000.000 und der Anzahl der Sekunden, die Sie das Experiment durchführen werden. Ich glaube nicht, dass dies praktisch ist für die Dauer, die benötigt wird, um Kollisionen eines hochwertigen RNG zu testen. Nicht einmal mit (hypothetischen) klugen Darstellungen.
14 Stimmen
In meiner Erfahrung habe ich noch nie eine Kollision gesehen ;-)
4 Stimmen
Die Algorithmen sind in RFC1422 spezifiziert: ietf.org/rfc/rfc4122.txt
8 Stimmen
@skaffman: Das RFC sagt überhaupt nichts über den verwendeten Algorithmus zur Generierung der Zufallszahlen aus.
5 Stimmen
Da es sich um eine offene Frage handelt, werde ich keine Antwort als die richtige Antwort markieren. Stattdessen werde ich jeder Antwort, die ich gut finde, eine Stimme geben :)
9 Stimmen
Von Wikipedia: ... Mit anderen Worten, nur nachdem 1 Milliarde UUIDs pro Sekunde für die nächsten 100 Jahre generiert wurden, läge die Wahrscheinlichkeit, nur einen einzigen Duplikat zu erstellen, bei etwa 50%.
0 Stimmen
Wir haben bisher 2 Kollisionen erlebt. Ich weiß nicht, wie es uns gelungen ist, sie zu verursachen :(
0 Stimmen
Die Quintessenz ist also, dass eine Kollision möglich ist. Es ist möglich, dass die ersten 2 UUIDs, die Sie generieren, identisch sind. Unwahrscheinlich, ja.
1 Stimmen
@MaVRoSCy es ist "mindestens einer" und nicht nur "einer"
1 Stimmen
Wenn Sie nicht zwei IDs innerhalb derselben Sekunde generieren müssen, ist es zu 100 % sicher für das aktuelle Datum + die Uhrzeit.