2013-08-15 17 views
44

Ich möchte zeitbasierte UUID in Java generieren - java.util.UUID.randomUUID() erzeugt eine UUID Version 4. Wie generiert man eine UUID (zeitbasierte) Version 1? Gibt es dafür eine separate Bibliothek oder ist es in der Java 7 API enthalten und ich vermisse sie?Wie generiere ich zeitbasierte UUIDs?

+0

Nein, das Java SDK nicht eine andere UUID Klasse sind als 'UUID '. –

+0

Die UUID-Klasse bietet jedoch Methoden wie public long timestamp(), um den Zeitstempel von der UUID abzurufen, wenn sie zeitbasiert ist. Es gibt jedoch keine Methode, um sie zu generieren – dogfish

+1

Check out JUG @ http://wiki.fasterxml.com/ JugHome, kann es Typ 1 tun. –

Antwort

10

Seien Sie sehr vorsichtig bei der Verwendung von com.eaio.uuid.UUID, wenn Sie eine GUID nach einer anderen Zeit als der aktuellen Zeit generieren müssen, da dies immer die gleiche UUID für die angegebene Zeit generiert. Wenn also Ihre Daten UUID generieren müssen, wobei Datensätze dieselbe Zeit haben dürfen, wird dies die gleiche UUID erzeugen.

Wir hierfür benötigte UUID für Datensätze zu erzeugen, die im Voraus erstellt werden und auch mehrere Datensätze gleichzeitig haben wir versucht, es zu zwicken von UUIDGen.createTime zu verwenden versuchen(). Wir haben festgestellt, dass es einen Nebeneffekt hat, die Zeit für Datensätze außer Betrieb zu ändern. Wenn eine nachfolgende Anforderung zum Erstellen von UUID einen Zeitstempel hat, der älter ist als die vorherige Anforderung, haben Sie am Ende eine UUID, die auf dem Zeitstempel der vorherigen Anfrage basiert.

Nach der ganzen Analyse mussten wir einfach zurückgehen, um UUID zum Zeitpunkt der Erstellung zu erstellen, so dass wir es nicht als Argument übergeben müssen. Welche Lösung wir auch immer entwickeln, um zu einem späteren Zeitpunkt UUID zu generieren, jeder hat einen Nachteil.