2013-08-15 14 views
44

Chcę generować oparty na czasie UUID w java - java.util.UUID.randomUUID() genruje wersję UUID 4. Jak wygenerować UUID w wersji 1 (opartej na czasie)? Czy istnieje oddzielna biblioteka do tego lub jest to część jak przewidziano w Java 7 API i brakuje mi go.Jak generować oparte na czasie identyfikatory UUID?

+0

Nie, Java SDK nie zawiera inną klasę UUID niż 'UUID '. –

+0

Klasa UUID zapewnia jednak metody takie jak publiczny długi znacznik czasu(), aby uzyskać znacznik czasu z UUID, jeśli jest oparty na czasie .. ale nie ma metody, aby go wygenerować – dogfish

+1

Sprawdź JUG @ http://wiki.fasterxml.com/ JugHome, może zrobić typ 1. –

Odpowiedz

10

Zachowaj ostrożność, używając polecenia com.eaio.uuid.UUID, jeśli chcesz wygenerować identyfikator GUID według czasu innego niż bieżący czas, ponieważ zawsze będzie generować ten sam identyfikator UUID dla danego czasu. Jeśli więc Twoje dane wymagają wygenerowania UUID, gdzie rekordy mogą mieć ten sam czas, wygeneruje to samo UUID.

Potrzebowaliśmy tego do wygenerowania UUID dla rekordów, które są tworzone z wyprzedzeniem, a także wielu rekordów w tym samym czasie, próbowaliśmy zmodyfikować go, próbując użyć UUIDGen.createTime(). Okazało się, że ma to efekt uboczny, aby zmutować czas dla rekordów nieczynnych. Jeśli kolejne żądanie utworzenia UUID ma znacznik czasu starsze niż poprzednie żądanie, otrzymasz UUID, który jest oparty na sygnaturze czasowej poprzedniego żądania.

Po analizie, musieliśmy po prostu wrócić do tworzenia UUID w momencie tworzenia, abyśmy nie musieli podawać go jako argumentu. Niezależnie od tego, jakie rozwiązanie zaproponujemy, aby później wygenerować UUID, każda z nich ma swoją wadę.

Powiązane problemy