Вопрос

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

С уважением Massimo

Это было полезно?

Решение

Смотрите эту статью: 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()

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

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

import java.util.UUID;
...
    private String uuid=null;
...
    protected String getUuid() {
        synchronized (this) {
          if (null ==uuid) {
            uuid = UUID.randomUUID().toString();
          }
          return uuid;
        }
      }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top