Abgesehen von Fällen, in denen Sie die API einer anderen Person verwenden müssen, die eine UUID erfordert, gibt es natürlich immer eine andere Lösung. Aber werden diese Alternativen alle Probleme lösen , die UUIDs machen? Werden Sie am Ende mehr Schichten von Hacks hinzufügen, um jeweils ein anderes Problem zu lösen, wenn Sie alle auf einmal hätten lösen können?
Ja, es ist theoretisch möglich, dass UUIDs kollidieren. Wie andere angemerkt haben, ist es lächerlich unwahrscheinlich, dass es einfach nicht erwägenswert ist. Es ist bisher noch nie passiert und wird es höchstwahrscheinlich nie tun. Vergiss es.
Der "offensichtlichste" Weg, um Kollisionen zu vermeiden, besteht darin, einen einzelnen Server auf jeder Einfügung eindeutige IDs generieren zu lassen, was offensichtlich schwerwiegende Leistungsprobleme verursacht und das Problem der Offline-Generierung überhaupt nicht löst. Hoppla.
Die andere "offensichtliche" Lösung ist eine zentrale Behörde, die Blöcke mit eindeutigen Nummern im Voraus verteilt. Dies ist im Wesentlichen das, was UUID V1 unter Verwendung der MAC-Adresse der Erzeugungsmaschine (über die IEEE-OUI) tut. Es kommt jedoch zu doppelten MAC-Adressen, weil jede zentrale Behörde irgendwann Fehler macht. In der Praxis ist dies weitaus wahrscheinlicher als eine UUID V4-Kollision. Hoppla.
Das beste Argument gegen die Verwendung von UUIDs ist, dass sie "zu groß" sind, aber ein (erheblich) kleineres Schema wird die interessantesten Probleme unweigerlich nicht lösen können. Die Größe von UUIDs ist ein inhärenter Nebeneffekt ihrer Nützlichkeit bei der Lösung genau dieser Probleme.
Möglicherweise ist Ihr Problem nicht groß genug, um das zu benötigen, was UUIDs bieten. In diesem Fall können Sie auch etwas anderes verwenden. Wenn Ihr Problem jedoch unerwartet auftritt (und die meisten auch), wechseln Sie später - und treten sich selbst dafür, dass Sie sie überhaupt nicht verwendet haben. Warum für Misserfolg entwerfen, wenn es genauso einfach ist, für Erfolg zu entwerfen?