Сейчас много систем завязано на Guid.
А кто-то контролирует дубликаты или всё привязано к железу сервера где генерится?
я слышал про разные алгоритмы гуидов с учетом гео, но интересен такой вариант.
если поставить кучу серверов которые будут искусственно генерить новые гуиды чтобы исчерпать значения.
они будут исчерпаны для данной машины?
Здравствуйте, e.thrash, Вы писали:
ET>если поставить кучу серверов которые будут искусственно генерить новые гуиды чтобы исчерпать значения.
Это известная проблема: https://rsdn.org/article/mag/200301/GUIDEcology.xml
Здравствуйте, e.thrash, Вы писали:
ET>А кто-то контролирует дубликаты
Нет.
ET>или всё привязано к железу сервера где генерится?
Всё привязано к математическим расчётам, которые говорят, что шансы сгенерировать два GUID-а приемлемо малы. А уж сделать это в одной системе, где их пересечение действительно приведёт к чему-то плохому — практически невозможно.
ET>если поставить кучу серверов которые будут искусственно генерить новые гуиды чтобы исчерпать значения. ET>они будут исчерпаны для данной машины?
Если не усложнять рассуждения реальными алгоритмами GUID-ов, а принять, что GUID это 128 случайных битов, то чтобы сгенерировать 2 совпадающих GUID-а с достаточно большой вероятносью, нужно сгенерировать порядка 2^64 GUID-ов. Очевидно, их при этом нужно где-то хранить.
Чтобы сгенерировать 2^64 GUID-ов за сто лет, нужно генерировать их со скоростью 250 млн в секунду. В принципе это реально на 100-ядерном сервере, если больше ничего на нём не делать. А если купить десять тысяч виртуальных машин в каком-нибудь амазон облаке, то можно и за год справиться.
Чтобы сохранить 2^64 GUID-ов, нужно 2^70 байтов, это примерно 1 зеттабайт информации (1 миллиард терабайтов). Вот тут уже посложней, по некоторым расчётам всё человечество примерно столько информации хранит.
В общем если направить все ресурсы цивилизации на генерацию и сохранение GUID-ов, есть шансы получить дубликат.
Здравствуйте, e.thrash, Вы писали:
ET>Сейчас много систем завязано на Guid. ET>А кто-то контролирует дубликаты или всё привязано к железу сервера где генерится? ET>я слышал про разные алгоритмы гуидов с учетом гео, но интересен такой вариант.
При _честной_ генерации 2**122 случайных бит в случае варианта 1 тип 4 (стандарт для MS), или 74 бита времени плюс 48 MAC в варианте 1 тип 1 (MAC-based) — совпадение невероятно.
Но это только если нет злоумышленников, которые указывают чужие GUID/UUID. Если они есть — сливай свет и туши воду — или добавлять надёжный id источника, или централизованный надёжный генератор.
К железу у MS обычно не привязывают, там чистый рандом.
ET>если поставить кучу серверов которые будут искусственно генерить новые гуиды чтобы исчерпать значения. ET>они будут исчерпаны для данной машины?
Вики бы прочитал:
Since the time and clock sequence total 74 bits, 274 (1.8×10**22, or 18 sextillion) version-1 UUIDs can be generated per node ID, at a maximal average rate of 163 billion per second per node ID.
Здравствуйте, e.thrash, Вы писали:
ET>если поставить кучу серверов которые будут искусственно генерить новые гуиды чтобы исчерпать значения. ET>они будут исчерпаны для данной машины?
Зачем его исчерпывать, если GUIDы не хранятся в секрете? При желании, злоумышленник может сознательно чужой GUID взять. Но только каковы шансы, что честно сгенерированный GUID окажется в одном контексте с GUID'ом, сгенерированным/сворованным какими-то козлами?
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, e.thrash, Вы писали:
ET>>если поставить кучу серверов которые будут искусственно генерить новые гуиды чтобы исчерпать значения. ET>>они будут исчерпаны для данной машины?
Pzz>Зачем его исчерпывать, если GUIDы не хранятся в секрете?
меня тут больше интересовал вопрос что будет если на Guid.NewGuid() весь диапазон исчерпается.
в каждом языке своя реализация?
Здравствуйте, e.thrash, Вы писали: ET>меня тут больше интересовал вопрос что будет если на Guid.NewGuid() весь диапазон исчерпается.
Байку про изобретателя шахмат слышали? ET>в каждом языке своя реализация?
Вас же не просто так отправляли в википедию. Там подробно написано, как должны быть устроены конформные реализации.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, e.thrash, Вы писали:
e> Pzz>Зачем его исчерпывать, если GUIDы не хранятся в секрете? e> меня тут больше интересовал вопрос что будет если на Guid.NewGuid() весь диапазон исчерпается.
Возьми, да исчерпай, никто же не запрещает. И посмотри что будет.
Здравствуйте, e.thrash, Вы писали:
ET>Сейчас много систем завязано на Guid. ET>А кто-то контролирует дубликаты или всё привязано к железу сервера где генерится? ET>я слышал про разные алгоритмы гуидов с учетом гео, но интересен такой вариант.
ET>если поставить кучу серверов которые будут искусственно генерить новые гуиды чтобы исчерпать значения. ET>они будут исчерпаны для данной машины?
Ответ, очевидно, один — нужно организовать GUID recycling. Продайте идею зеленым. Или Грету привлеките.
Здравствуйте, e.thrash, Вы писали:
ET>меня тут больше интересовал вопрос что будет если на Guid.NewGuid() весь диапазон исчерпается. ET>в каждом языке своя реализация?
Напомню, что 10^50 (10 в 50-й степени) есть число атомов в наблюдаемой вселенной.
И оно существенно меньше числа возможных GUID'ов.
Хотя... это была старая цифра, середины XX века. Новая цифра где-то 10^82. И это уже сравнимо с диапазоном GUID. Но проблем беспокоиться я лично не вижу.
Все данные устаревают, GUID'ы, интегрированные в данные, тоже устареют. И могут быть спокойно переиспользованы каждые 50-100 лет без всяких последствий для заказчика)))