boost::uuid / уникальный для разных баз данных

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

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

С наилучшими пожеланиями

1 ответ

Решение

Идея, лежащая в основе 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.

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