Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > GUID


Автор: Rennigth 24.6.2004, 16:05
global universal id но мля.... что это и счем его едят, то есть на кой нужен..
и как мне идентифицировать файлы по GUID.

Автор: stab 24.6.2004, 16:14
GUID - Global Unique IDentifier. Целое число, занимает 128 бит. Испоьльзуется для идентитифкации чего либо, т.е. что-то типа случайного числа. Создается функцией CoCreateGuid.

Цитата
и как мне идентифицировать файлы по GUID.


а что за файлы?

Автор: Rennigth 24.6.2004, 16:24
Мне надо написать CGI-модуль, для передачи файлов через Интернет клиенту
Файлы должны идентифицироваться по GUID

ну в принципе я файлы то передаю а как я понял они должны выбираться (т.е. какой передавать) по Guid

Автор: stab 24.6.2004, 16:28
Таблицу завести где в соотвествие GUID ставится файл или просто файлы обозвать в GUID формате, например {04B1A7E3-4379-39D2-B003-57AF524D9AC5}.txt.

з.ы. не совсем понимаю, что требуется сделать

Автор: _hunter 24.6.2004, 16:31
файлы нужно не по GUID идентифицировать ( разве что сам его в них запишеш) а по чему-то тира MD5Sum

Автор: Rennigth 24.6.2004, 16:38
да вроде разобрался
нашел старую какуюто базу на серваке где все файлы типа
{EEC6BE6E-97D4-4BDF-BDAF-1D101E7B81D5}.jpg
правда и сам в этом юмора пока не вижу


Автор: _hunter 24.6.2004, 16:43
это сделано только для того, чтобы исключить возможность (понизить вероятность smile.gif )совпадения имен файлов при добавлении их к базе

возможно это имаджи для аватаров ( каждый пользователь имеет свой GUID по которому ищется аватар )

да много чего еще может быть smile.gif

Автор: <Spawn> 24.6.2004, 19:48
Цитата(_hunter @ 24.6.2004, 08:43)
понизить вероятность smile.gif

Вряд ли ты в своей жизни дублика встретишь - если я привильно помню описалово, то если генерить GUID-ы со скоростью 1 000 000 в секунду, то вероятность его повторения равна 5 % за время существования вселеннойsmile.gif)))

Автор: Петрович 24.6.2004, 22:50
Цитата
Вряд ли ты в своей жизни дублика встретишь - если я привильно помню описалово, то если генерить GUID-ы со скоростью 1 000 000 в секунду, то вероятность его повторения равна 5 % за время существования вселенной)))

сори за offtop, но данное высказывание навеяло в памяти одну поучительную байку.
Цитата
Сидят два математика в комнате и рассуждают о теории вероятности:
- Какова вероятность, что очередной проходящий мимо нашего окна человек будет мужчина?
- 1/2.
- Какова вероятность, что пройдут два мужчины подряд?
- 1/4.
- А что три? 
- 1/8.
...
- Какова вероятность, что пройдут подряд 100 мужчин?
- Два в степени минус 100. Пренебрежимо малая величина.
- Можно пренебречь? Поспорите со мной на XXX долларов, что такого не случится?
Поспорили. И тут-же, мимо окна прошла рота солдат, идущих в баню.

Это я к тому, что в жизни и тем более в программировании, если уж существует даже небольшая вероятность наступления какого-либо события, считайте что оно обязательно наступит, причем в самый неподходящий момент.
А что касается GUID, то его генерация устроена так, что он в принципе не должен повторяться, в период предполагаемой жизни компьютеров существующей архитектуры. В общем, на наш век и век наших детей, внуков, правнуков, ... должно хватить.
Более того, фирма Microsoft, изобретатель GUID, утверждает что любой сгенеренный GUID уникален в мировом масштабе. Т.е. другого такого не существует в нашем мире, отсюда и его название: Global Unique Identifier! Именно поэтому он очень удобен для идентификации разных сущностей. Например, вы имеете две БД одинаковой структуры на разных компьютерах. Если при этом вы будете использовать для идентификации записей GUID, то, даже сгенеренные на разных компьютерах записи, при слиянии БД не будут конфликтовать. Так-же можно поступить и с файлами.


Автор: Maverick 25.6.2004, 09:27
Я где-то читал, а может не читал.... Что эти номера сгенерены от номеров оборудования, которые уникальны от производителя... по-моему, от серийных номеров сетевых карт, что-то такое... очень смутно помню....

Автор: Петрович 25.6.2004, 10:27
Цитата
по-моему, от серийных номеров сетевых карт

Почти правильно. Если точнее, то в генерации GUID учавствует MAC-адрес сетевой карты, если таковая конечно установлена в компьютере. Суть в том, что весь диапазон MAC-адресов поделен между производителями контроллеров Ethernet. Это обеспечивает уникальность MAC-адреса каждого существующего сетевого Ethernet-контроллера. Естественно, этим очень удобно пользоваться при генерации GUID.
Правда, некоторое время назад, встречал статьи о том, что некоторые китайские нелегальные производители сетевых контроллеров стали использовать чужие (естественно, сами-то не зарегестрированны) MAC-адреса. А обнаружилось это при столкновении таких совпадающих адресов в одной локальной сети! Естественно, при таком раскладе, уже будет трудно гарантировать ГЛОБАЛЬНУЮ уникальность GUID. Надеюсь, что ситуация не выйдет из под контроля.
Сразу скажу: как обеспечивается ГЛОБАЛЬНАЯ уникальность GUID сгенеренного на компьютерах не оснащенных сетевыми контроллерами, или оснащенными не Ethernet-контроллерами я не знаю. sad.gif.

Автор: _hunter 25.6.2004, 19:14
на 2000/XP MAC адрес не используется:
Цитата
For security reasons, it is often desirable to keep ethernet/token ring addresses on networks
from becoming available outside a company or organization. In Windows XP/2000, the UuidCreate function generates a UUID that cannot be traced to the ethernet/token ring address of the computer on which it was generated. It also cannot be associated with other UUIDs created on the same computer. If you do not need this level of security, your application can use the UuidCreateSequential function, which behaves exactly as the UuidCreate function does on all other versions of the operating system.


Цитата
Уникальность во времени достичигается за счет того, что каждый GUID содержит метку времени, указывающую, когда он был создан, что гарантирует отличие друг от друга всех GUID, сгенерированных на данной машине. Для обеспечения уникальности в пространстве у каждого компьютера, который может быть использован для генерации GUID, должен быть уникальный идентификатор. В качестве такого идентификатора программа генерации GUID использует уникальное значение, уже имеющееся на большинстве компьютеров: адрес платы сетевого интерфейса. Если в компьютере не установлен сетевой адаптер, то из различных случайных характеристик данной системы генерируется фиктивный идентификатор машины. Но и тогда маловероятно, что идентификаторы двух машин окажутся одинаковыми.


а вот алгоритм:
http://www.ics.uci.edu/~ejw/authoring/uuid-guid/draft-leach-uuids-guids-01.txt

Автор: Петрович 25.6.2004, 20:30
Цитата
на 2000/XP MAC адрес не используется

Я не очень хорошо владею англицким языком, но насколько я понял, имеется ввиду что под 2000/XP, GUID генерится так, что не позволяет по сгенереннуму значению определить сетевой адрес сгенерившего его компьютера. Т.е. он все равно используется, но пропускается через необратимое преобразование.
Может и не так.

Автор: Петрович 25.6.2004, 20:52
Да. Почитал документ по ссылке, псмотрел что генерит мой Win. Похоже что мой WinXP (в Delphi по Ctrl+Shift+G) генерит GUID версии 4 (13-й шеснадцатеричный разряд = 4) в которой предписанно в качестве кода узла использовать случайное число. Более того, если я правильно понял, то бит multicast в поле узла тоже установлен что свидетельствует о том что вместо адреса было использовано случайное число.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)