Подтвердить что ты не робот

Насколько коротким может быть GUID?

Я знаю стандартные идентификаторы GUID. Могут ли они быть короче? Какова теория этого?

4b9b3361

Ответ 1

Ответ Грега Дин правильный, но для того, чтобы понять, как создается идентификатор GUID и почему его не следует сокращать, я настоятельно рекомендую вам прочитать статью ниже.

Old New Thing: идентификаторы GUID глобально уникальны, но подстроки GUID не:

Клиенту необходимо создать 8-байтовое уникальное значение и их начальное Идея заключалась в том, чтобы генерировать GUID и бросать во второй половине, сохраняя первые восемь байтов. Они хотели знать если это была хорошая идея.

Нет, это не очень хорошая идея.

Алгоритм генерации GUID полагается о том, что он имеет все 16 байт использовать для установления уникальности, и если вы выбрасываете половину его, вы теряете уникальность.

Ответ 2

В зависимости от вашего приложения, все зависит от того, насколько велика ваша "G" (глобальная) в вашем приложении.

"GUID", глобальный уникальный идентификатор. Типичные современные "универсальные" GUID предназначены для любого приложения, и их "G", их, "Global", буквально такова. Глобальный. Мировой. Во всех приложениях, нациях, географии, во всем. 16 байтов - это много информации.

Теперь, если в ВАШЕМ ПРИМЕНЕНИИ ваша "G" не такая уж большая, если вы не ожидаете, или намерение "G" быть глобальным в смысле "Мир", а не просто "глобальным" в смысле прикладного пространства, то вы можете легко уменьшить размер до объема вашего приложения.

У вас четыре подразделения в вашей компании, у вас больше не будет? 2 бит - 0, 1, 2, 3 - достаточно большой "GUID" для этой задачи. Ясно, что это надуманное приложение.

В прошлом мы узнали о последствиях "предельных битов", когда мы справлялись с проблемами Y2K. Итак, "бит дешевый" является достаточно обоснованной причиной, чтобы НЕ ограничивать размер GUID и ошибочно на стороне "слишком много бит на данный момент". Но, правда, многие приложения просто ограничены, многие приложения могут генерировать много данных или быть ограничены пропускной способностью, где нет необходимости в 16-байтовом GUID, а использование одного влияет на производительность и ресурсы.

Итак, поймите концепцию GUID и как это применимо к вашим приложениям. Затем вы можете сделать все необходимое.

Ответ 4

Чем короче "якобы глобально уникальные" идентификаторы, тем выше вероятность столкновения, когда многие из них более или менее случайно генерируются - и, вероятно, этот шанс выше, чем вы думаете, из-за "Парадокс дня рождения"... см. http://betterexplained.com/articles/understanding-the-birthday-paradox/. Как (очень приблизительное, но полезное) эмпирическое правило, вероятность не имеет значения, если (среди N возможных UID) вы назначаете sqrt(N) или около того. Поэтому 128-битный идентификатор довольно безопасен от случайного столкновения, даже для многих миллиардов идентификаторов; но если бы вы сократили его до, скажем, 32 бит, у вас был бы значительный риск столкновения даже для нескольких десятков тысяч идентификаторов.

Ответ 5

Они равны 16 байтам.

Технически говоря, эффект их сокращения будет зависеть от алгоритма, используемого для их генерации. Учитывая, что API, который вы использовали (вероятно), не гарантирует определенную версию или реализацию, это плохая идея сократить их. Даже если это так, это плохая идея. Если вам требуется менее 16 байтов энтропии, вы не должны пытаться использовать GUID.

Для получения дополнительной информации: http://en.wikipedia.org/wiki/Globally_Unique_Identifier

Ответ 6

Проще говоря, GUID гарантированно уникальны, потому что они действуют как координаты.

Традиционно *, половина была специфичной для машины (с использованием MAC-адреса), а половина была получена из времени.

Поскольку MAC уникальны между машинами, и каждая машина может выполнять одну команду за раз (традиционно помните!), GUID определенно будет уникальным.

Это означает, однако, что если вы удаляете какую-либо часть GUID, вы теряете гарантию уникальности. Г-н Мартелли дает хорошее объяснение, почему это больше проблема, чем вы могли бы предположить.

* Я говорю традиционно, но я никогда не читал статью, которая указывает на серьезное изменение. Я не думаю, что фактические MAC используются в настоящее время (по соображениям безопасности, я думаю), но я думаю, что они все еще являются MAC-машинами или, по крайней мере, для машин.