Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

GUID Генерация уникального идентификатора   Найти похожие ветки 

 
Dmitry_177   (2006-10-13 10:17) [0]

Если нажать в Delphi Ctrl+Shift+G то сгенерируется уникальный идентификатор, который используем в приложении, но у меня вопрос таков, ведь может получиться так, что такой же номер будет использовать другая программа, если этот же номер был сгенерирован на другом компъютере... Возможно ли такое?


 
MBo ©   (2006-10-13 10:19) [1]

>Возможно ли такое?
Да, с вероятностью примерно 2^(-128)


 
Dmitrij_K   (2006-10-13 10:19) [2]

Нет


 
Kolan ©   (2006-10-13 10:19) [3]


> что такой же номер будет использовать другая программа

Очень мало вероятно. Алгоритм таков, что за ближайшие 100 000(если не ошибаюсь) лет это не случится :)


 
clickmaker ©   (2006-10-13 10:19) [4]


> Возможно ли такое?

говорят, что нет
На наш век хватит


 
Skier ©   (2006-10-13 10:41) [5]


> Возможно ли такое?

Если на компьютере нет сетевой карты, то возможно. см [1], если
есть - то даже теоретически невозможно.


 
ANB ©   (2006-10-13 10:43) [6]


> если
> есть - то даже теоретически невозможно.

никто не гарантирует уникальност MAC адресов на всех сетевых картах все производителей (особливо китайских)


 
Reindeer Moss Eater ©   (2006-10-13 10:49) [7]

есть уиды есть гуиды. и даже если у вас есть сетевой адаптер супер пупер бренда, все равно можно сгенерить идентификатор, не совсем уникальный.


 
guav ©   (2006-10-13 14:14) [8]

Из чего вообще делается GUID ?
Нельзя ли сделать два одинаковых гуида на одной машине ?
Достаточно и сетево карты, или ещё IP нужен ?


 
Джо ©   (2006-10-13 14:23) [9]

> [8] guav ©   (13.10.06 14:14)

Ну, генерируется, вроде, на основе MAC"а сетевой, текущей даты/времени + псевдо-случ. число. Вроде так.


 
Lamer@fools.ua ©   (2006-10-13 15:17) [10]

MAC-адрес сетевой уже не используется для генерации GUID"ов, AFAIK.


 
@!!ex ©   (2006-10-13 16:16) [11]

Теоретически UID не может совпадать с каким то другим UID"ом, если ты используеш правлиьное время, дату и "правильную" сетевую карту.

Но несколько лет назад были зафиксированы случаи совпадения UID"ов созданных на машинах с китайскими сетевухами.

А вообще про УИДЫ много шуток есть. :)
ТИпа, через сколько они кончатся, если на одной машине генерить их каждую секунду. :)


 
sniknik ©   (2006-10-13 16:39) [12]

> ТИпа, через сколько они кончатся, ...
есть мнение, что значения гуидов это невосполнимый ресурс, и в конце концов они закончатся если срочно не принять мер по освобождению неиспользуемых... т.е. типа, выделил... понял что не нужен, освободи! и функцию специальную для этого сделать предлагали.


 
Игорь Шевченко ©   (2006-10-13 16:41) [13]

"В последнее время наметилась одна очень нехорошая тенденция: многие разработчики совершенно безответственно относятся к тому, как их приложения используют ресурсы. Да, я понимаю все аргументы, связанные с быстрым ростом производительности аппаратуры и стоимости оптимизации приложений. Кроме того, многие авторитеты последовательно призывают к своевременному освобождению ресурсов, занятых приложением, а также к минимизации ресурсов, используемых одновременно.

Я терпеливо следил за дискуссиями на эту тему, пока один ужасающий факт не привлек мое внимание.

Дело в том, что, когда речь заходит о ресурсах в применении к программированию, обычно подразумеваются локальные ресурсы компьютера, на котором выполняются приложения. И, в большинстве случаев, это восполнимые ресурсы, которые еще и занимаются только на время работы приложения.

Но, как я недавно понял, существует один важный ресурс, который, во-первых, является глобальным, а во-вторых, совершенно невосполнимым!

Я говорю о глобально уникальных идентификаторах, или UUID (также известных как GUID, CLSID, IID и др.). Как следует из документации, каждое обращение к функции WinAPI UuidCreate возвращает уникальный идентификатор! Более того, этот способ настоятельно рекомендуется к применению всякий раз, как в приложении нужно что-либо уникальное. Но ведь очевидно, что все эти идентификаторы берутся из конечного набора! И каждый вызов UuidCreate уменьшает, таким образом, количество идентификаторов, доступных всем приложениям! Стоит также заметить, что не существует никакого способа сдать использованный идентификатор обратно, когда он больше не нужен.

Самое ужасное в том, что исчерпание этого ресурса мгновенно парализует работу всех приложений, которые его используют. К несчастью, их список включает не только поделки, слепленные на коленке полуграмотными подростками. Такие серьезные продукты, как MS SQL Server, используют GUID для идентификации транзакций. На их основе работают многие сервисы, стабильность которых определяет комфорт, а иногда и жизнь людей.

Я не против использования этой технологии вообще. Но многие программисты игнорируют те строки документации по функции CoCreateGuid, в которых рекомендуется использовать ее для получения постоянных идентификаторов в распределенной вычислительной среде:

Use the CoCreateGuid function when you need an absolutely unique number that you will use as a persistent identifier in a distributed environment.

Я вижу несколько решений данной проблемы. Скорее всего, идеально было бы сделать функцию UuidCreate платной. Даже цены в 1 доллар за 1000 GUID было бы достаточно для того, чтобы разработчики задумались о количестве идентификаторов, потребляемых их приложениями. Но пока этот сервис остается бесплатным, я призываю программистов всего мира прекратить безответственную практику использования глобально уникальных идентификаторов для короткоживущих объектов, а также для настольных приложений, в которых можно использовать альтернативные методики получения уникальных идентификаторов (например, последовательности целых чисел).

Я также собираюсь обратиться к компании Microsoft c требованием реализовать функцию UuidDestroy, которая позволит возвращать обратно ставшие ненужными уникальные идентификаторы (я даже боюсь представить это бесчисленное множество уже безвозвратно утерянных GUID!).

Если вы поддерживаете эту акцию, то напишите, пожалуйста, письмо в штаб-квартиру Microsoft в Редмонде по следующему адресу:

Microsoft Corporation
One Microsoft Way
Redmond, WA 98052-6399
USA"

(с) http://rsdn.ru/article/mag/200301/GUIDEcology.xml


 
Ученик чародея ©   (2006-10-13 16:46) [14]


> Игорь Шевченко ©   (13.10.06 16:41) [13]


А как закачать файл обратно в Интернет, если он не нужен?


 
palva ©   (2006-10-13 16:49) [15]

> реализовать функцию UuidDestroy, которая позволит возвращать обратно ставшие ненужными уникальные идентификаторы

Я думаю, что надо поощрять тех, кто возвращает пустые GUID, а не бросает их где попало. Есть еще извращенцы, которые оставляют недопитый GUID на видном месте и наблюдают из-за угла, чтобы поиздеваться над жаждущими.

А 1 цент за возвращенный GUID я бы посчитал справедливым возмещением за усилия а также за амортизацию компьютера, на котором этот GUID был выработан.


 
Palladin ©   (2006-10-14 14:16) [16]


> [13] Игорь Шевченко ©

Вот так в MS ловят идиотов :)


 
Anatoly Podgoretsky ©   (2006-10-14 14:26) [17]

Игорь Шевченко ©   (13.10.06 16:41) [13]
Приколист


 
Чапаев ©   (2006-10-14 15:03) [18]

Если кто всё же потрудится зайти на РСДН, то сей бравый форумянин заметит, что процитированная статья лежит в разделе "Юмор".


 
sniknik ©   (2006-10-14 15:16) [19]

Чапаев ©   (14.10.06 15:03) [18]
типа, это ктото воспринимает серьезно!? ;)


 
Palladin ©   (2006-10-14 15:17) [20]

Думаю бОльшая часть бравых форумчан давно в курсе :)


 
TUser ©   (2006-10-14 20:47) [21]

Я вот только первый раз услышал о подобной опасности! Это же страшнее, чем проблема-2000!


 
isasa ©   (2006-10-14 20:59) [22]

Да ну. Гуиды уже не успеют кончиться. В .NET, например, уже на них "подзабили". Поэтому, чтобы мучительно не душила жаба, наоборот, их надо побыстрее заюзать.


 
vidiv ©   (2006-10-14 21:13) [23]

я так считаю:

GUID по своей сути 16и-байтный
пусть из них 6 байт используются для кодирования MAC адреса (он же ведь 6 байтный, и их может быть 281 474 976 710 656 различных), тогда остается еще 10 байт на уникальное значение, а их может быть: 1 208 925 819 614 629 174 706 176... простой подсчет показывает, что если генерировать UID каждую 1 миллисекунду (0.001 сек), то данного процесса хватит на 38 308 547 532 595,29 лет. И это только для определенного MAC адреса... так что можно расходовать безбашенно!


 
MikePetrichenko ©   (2006-10-14 21:18) [24]

Господа, вы не поняли всей сложности проблемы!
Оказывается, и это Большой секрет, что механиз RPC в *nix и Win тоже использует GUID для идентификации транзакций.
Да, да! И в *nix тоже!


 
Пользователь   (2006-10-14 21:19) [25]

все равно можно сгенерить идентификатор, не совсем уникальный

Рыба второй свежести?


 
vidiv ©   (2006-10-14 21:23) [26]


> Я вот только первый раз услышал о подобной опасности! Это
> же страшнее, чем проблема-2000!

проблема — чушь... меня больше интересует проблема 2038 года :))


 
TUser ©   (2006-10-14 21:30) [27]

> проблема — чушь... меня больше интересует проблема 2038 года :))

Не, круче 2008. Даже комитет соотвествующий есть. Хотя, имхо, актуальнее для России проблема-2016.


 
Anatoly Podgoretsky ©   (2006-10-14 21:33) [28]


> проблема — чушь... меня больше интересует проблема 2038
> года :))

Переходи на Виндоус


 
Eraser ©   (2006-10-14 21:36) [29]

> (с) http://rsdn.ru/article/mag/200301/GUIDEcology.xml

бред, мягко говоря...
каким образом GUDI, используемый как идентификатор транзакиции пересекается с GUID"ом COM-класса.. или GUID"ом какого-либо объекта в моей SuperCool прожке?


 
TUser ©   (2006-10-14 21:46) [30]

> Eraser ©   (14.10.06 21:36) [29]

см. [18]


 
vidiv ©   (2006-10-14 21:47) [31]


> Anatoly Podgoretsky ©   (14.10.06 21:33) [28]
> Переходи на Виндоус

Так я то и так... я за интернет боюсь :)


 
vidiv ©   (2006-10-14 22:16) [32]


> Не, круче 2008. Даже комитет соотвествующий есть. Хотя,
> имхо, актуальнее для России проблема-2016.

Есть слух (для меня слух, т.к. телек не смотрю), что Путина хотят на третий строк разрешить =))

а все же интересно, что будет с 32разрядными компами в 2038 году =)


 
Petr V. Abramov ©   (2006-10-14 22:20) [33]

> а все же интересно, что будет с 32разрядными компами в 2038 году =)
 музей


 
Anatoly Podgoretsky ©   (2006-10-14 22:38) [34]

vidiv ©   (14.10.06 21:47) [31]
Да страшно будет.


 
Ketmar ©   (2006-10-15 18:17) [35]

кто использовал мой гуид и не положил на место?!


 
Desdechado ©   (2006-10-15 19:28) [36]

> несколько лет назад были зафиксированы случаи совпадения UID"ов
> созданных на машинах с китайскими сетевухами.
Пару лет назад вышла огромная партия мамок от какого-то известного тайваньского производителя, на встроенных сетевухах которого в качестве MAC-адресов гордо красовались сплошные нули, причем у всех.


 
vidiv ©   (2006-10-15 19:30) [37]


> Пару лет назад вышла огромная партия мамок от какого-то
> известного тайваньского производителя, на встроенных сетевухах
> которого в качестве MAC-адресов гордо красовались сплошные
> нули, причем у всех.

и как??? работало?


 
DiamondShark ©   (2006-10-15 19:48) [38]


> и как??? работало?

А куда оно денется?
Лишь бы в одном сегменте сети вместе не оказались.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.038 c
11-1137505666
Sormy
2006-01-17 16:47
2006.11.05
OpenDirDialog Error in KOL&MCK v2.31


15-1160644674
DelphiLexx
2006-10-12 13:17
2006.11.05
ToolBar2000+TBX


8-1143894964
zxcv
2006-04-01 16:36
2006.11.05
HELP(Timage Tbitmap)


2-1161627827
DROWSY
2006-10-23 22:23
2006.11.05
DataPump - где такой конвертер находится в Дельфи?


2-1161260781
vitaly27
2006-10-19 16:26
2006.11.05
Помогите пожалста больше немогу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский