Являются ли UUID уникальными в разных системах? - PullRequest
11 голосов
/ 09 апреля 2011

Мне интересно, уникальны ли UUID, даже если они генерируются в разных системах, которые могут использовать разные алгоритмы.Например, если вы сгенерировали кучу UUID в MySQL и .Net, будет ли выше вероятность коллизии, или все системы используют один и тот же алгоритм и тем самым гарантируют, что коллизии маловероятны?

Ответы [ 4 ]

6 голосов
/ 09 апреля 2011

С Универсальный уникальный идентификатор в Википедии: ... слово «уникальный» следует понимать как «практически уникальный», а не «гарантированный уникальный». Поскольку идентификаторы имеют конечный размер, два разных элемента могут иметь один и тот же идентификатор. Размер идентификатора и процесс генерации должны быть выбраны так, чтобы сделать это практически невозможным.

2 голосов
/ 09 апреля 2011

Учитывая 128 битов, существует 340 282 366 920 938 463 463 374 607 431 768 211 456 возможных UUID.Теория заключается в том, что этого должно быть достаточно, чтобы они были универсально уникальными - поэтому краткий ответ на ваш вопрос - да , даже если разные системы используют другие версии алгоритма.

ВзятьПосмотрите таблицы в вики-статье, чтобы получить представление о вероятности столкновения.

2 голосов
/ 09 апреля 2011

Нет, это может варьироваться.По сути, вероятность коллизии зависит от величины энтропии (= "истинная" непредсказуемость) в методе генерации UUID.

(a) существуют разные стандартные форматы UUID, каждыйиз которых внутренне имеют различную величину энтропии (например, если вы основываете свой UUID на Mac и отметке времени, это в принципе имеет меньшую энтропию, чем основание вашего UUID просто на строке случайных битов)

(b) для Типа4, на основе случайных битов, нет стандартного алгоритма генерации случайных чисел / стандартного источника энтропии.

Если у вас есть «идеальный» генератор случайных чисел, то случайный UUID имеет 2 ^ 116 возможных значений (12 битпотрачены впустую на маркеры версий и т. д.), другими словами, вы должны сгенерировать около 2 ^ 56 или 7x10 ^ 16 UUID перед получением коллизии.

2 голосов
/ 09 апреля 2011

UUID должен содержать метку времени и номер версии, но остальные должны быть случайными, поэтому, если вы не уверены, что UUID генерируются в разное время, у вас есть одинаковые шансы на столкновение независимо от генератора программного обеспечения. Более старые версии алгоритмов генерации включали MAC-адрес, что помогало в степени риска конфликта MAC-адресов. Это все указано в RFC 4122 .

...