boost :: uuid / уникальный для разных баз - PullRequest
1 голос
/ 09 ноября 2011

Я хочу сгенерировать uuid, который должен использоваться в качестве уникального идентификатора в разных системах / базах данных.Я читаю примеры, но не понимаю, как я могу быть уверен, что сгенерированные идентификаторы уникальны для разных систем и баз данных.

Надеюсь, вы мне поможете.

С уважением

1 Ответ

2 голосов
/ 09 ноября 2011

Идея UUID заключается в том, что - в зависимости от того, как они генерируются, - существует столько значений , представляемых с помощью 122-бит *, что вероятность случайные столкновения - опять же, в зависимости от того, как они генерируются - очень, очень, очень, очень, очень, очень, очень, очень, очень, очень маленькие.

Выдержка из Википедии для UUID версии 4 (Leach-Salz Random):

Другими словами, только после генерирования 1 миллиарда UUID каждую секунду в течение следующих 100 лет вероятность создания только одного дубликата составит около 50% . Вероятность получения одного дубликата составила бы около 50%, если бы каждый человек на земле имел 600 миллионов UUID.

... однако эти вероятности сохраняются только тогда, когда UUID генерируются с использованием достаточной энтропии.

Конечно, существуют другие схемы генерации UUID и «общеизвестные GUID», не все из которых могут подходить для «глобально уникального» использования. (Кроме того, неспецифические идентификаторы UUID, как правило, плохо работают с первичными / кластерными ключами из-за фрагментации при вставке: SQL Server имеет NEWSEQUENTIALID , чтобы помочь с этой проблемой.)

Счастливого кодирования.


* В UUID может быть не более 128 битов, однако некоторые версии UUID используют некоторые биты внутренне. Я не знаю, что использует boost, но я подозреваю это тоже UUIDv4.

...