Die auch uuid4
Funktion eine UUID aus 16 zufälligen Bytes erstellt zurück und es ist extrem unwahrscheinlich, dass eine Kollision zu erzeugen, bis zu dem Punkt, an dem Sie wahrscheinlich nicht einmal darum kümmern sollte.
Wenn aus irgendeinem Grund uuid4
tut produzieren ein Duplikat es viel wahrscheinlicher ist ein Programmierfehler wie beispielsweise ein Ausfall sein, um richtig den Zufallszahlengenerator als echt Pech zu initialisieren. In diesem Fall wird der Ansatz, den Sie verwenden, nicht machen es besser - ein falsch initialisierter Zufallszahlengenerator kann immer noch Duplikate auch bei Ihrem Ansatz erzeugen.
Wenn Sie die Standardimplementierung verwenden random.seed(None)
Sie im source, dass nur 16 Byte der Zufallsdaten verwendet werden, sehen den Zufallszahlengenerator zu initialisieren, so ist dies ein ein Problem würden Sie zuerst lösen müssen. Auch wenn das Betriebssystem keine Zufälligkeitsquelle bereitstellt, wird die Systemzeit verwendet, die überhaupt nicht sehr zufällig ist.
Aber ignorieren diese praktischen Probleme, Sie sind grundsätzlich auf dem richtigen Weg. Um einen mathematischen Ansatz zu verwenden, müssen wir zuerst definieren, was Sie mit "Eindeutigkeit" meinen. Ich denke, eine vernünftige Definition ist die Anzahl der IDs, die Sie generieren müssen, bevor die Wahrscheinlichkeit, ein Duplikat zu erzeugen, eine Wahrscheinlichkeit von p
übersteigt. Eine approcimate Formel hierfür lautet:

wo d
2**(16*8)
für einen einzelnen zufällig generierte UUID und 2**(16*2*8)
mit Ihrem vorgeschlagenen Ansatz. Die Quadratwurzel in der Formel ist in der Tat auf die Birthday Paradox zurückzuführen. Aber wenn Sie es ausarbeiten, können Sie sehen, dass, wenn Sie den Wertebereich d
bei gleichbleibender konstant halten, Sie auch quadratisch n
.
Ist Einzigartigkeit ein Kontinuum? "Einzigartiger" ist immer verwirrend, auch wenn Sie verstehen können, was gemeint ist. –
@Fred - 'uuid4' kann nicht garantiert keine Kollisionen erzeugen. Wenn es so wäre, würde ich mir darüber keine Sorgen machen. – orokusaki