Как создать уникальный идентификатор

Как мы можем генерировать уникальные идентификаторы между двумя JVM, работающими одновременно? Я думаю UUID uuid = UUID.randomUUID(); или же UID uid = new UID(); недостаточно.

2 ответа

Вы можете использовать идентификатор UUID-сервера, чтобы UUID был уникальным на всех серверах.

Посмотрите документы UUID, вы можете перейти по ссылке, чтобы найти rfc4122, объясняющий, как будет сгенерирован UUID. Последние 48 бит касаются вашего вопроса, spacial unique node identifier подтверждая, что это значение будет универсальным уникальным идентификатором.

4.1.2.  Layout and Byte Order

   To minimize confusion about bit assignments within octets, the UUID
   record definition is defined only in terms of fields that are
   integral numbers of octets.  The fields are presented with the most
   significant one first.

   Field                  Data Type     Octet  Note
                                        #

   time_low               unsigned 32   0-3    The low field of the
                          bit integer          timestamp

   time_mid               unsigned 16   4-5    The middle field of the
                          bit integer          timestamp

   time_hi_and_version    unsigned 16   6-7    The high field of the
                          bit integer          timestamp multiplexed
                                               with the version number


   clock_seq_hi_and_rese  unsigned 8    8      The high field of the
   rved                   bit integer          clock sequence
                                               multiplexed with the
                                               variant

   clock_seq_low          unsigned 8    9      The low field of the
                          bit integer          clock sequence

   node                   unsigned 48   10-15  The spatially unique
                          bit integer          node identifier

Единственный риск, который я вижу, связан с этой частью

UUID - это идентификатор, который является уникальным как в пространстве, так и во времени, относительно пространства всех UUID. Поскольку UUID имеет фиксированный размер и содержит поле времени, значения могут быть перенесены

Но это должно было бы продолжаться долго, прежде чем оно придет к вам. Так что я бы не стал сильно беспокоиться о текущем решении.

Другие вопросы по тегам