Последовательный идентификатор Guid в Java

учитывая сообщение, которое я сделал о последовательной производительности guid на Microsoft.NET рамки (см. что улучшение представления последовательного Guid над стандартным Guid?) у кого-то есть правильная, уверенная, быстрая и хорошо работающая реализация Java того же алгоритма, реализованного в DLL Windows?

с уважением Массимо!--3-->

4 ответов


см. эту статью:http://www.informit.com/articles/article.aspx?p=25862&seqNum=7 (ссылка на стр. 7).

Он содержит алгоритм для того, что автор называет "гребенчатыми" GUID; я воспроизводю его код (SQL) ниже:

SET @aGuid = CAST(CAST(NEWID() AS BINARY(10)) 
+ CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER)

тривиально преобразовать это в Java или ваш желаемый язык. Очевидный основополагающий принцип заключается в том, чтобы сделать дату компонентом Guid. Вся статья является хорошим чтением, так как он делает хороший анализ производительности различный подход.


для последовательных UUID вы ищете UUID версии 1. генератор Java UUID проект, кажется, работает довольно хорошо и довольно прост в использовании:

Generators.timeBasedGenerator().generate().toString()

эта страница ссылается на пару версий 1 (последовательных) реализаций UUID в Java: http://johannburkard.de/blog/programming/java/Java-UUID-generators-compared.html


Я использую это для создания UUID (универсально уникальных идентификаторов) для моих DTOs, которые действуют как суррогатные ключи для переходных коллекций. Не знаю, одно ли это, но это может указать вам в правильном направлении.

import java.util.UUID;
...
    private String uuid=null;
...
    protected String getUuid() {
        synchronized (this) {
          if (null ==uuid) {
            uuid = UUID.randomUUID().toString();
          }
          return uuid;
        }
      }