Re[2]: Альтернатива GUID
От: Disappear  
Дата: 07.05.05 21:08
Оценка:
Здравствуйте, exp_1, Вы писали:

_>Здравствуйте, Disappear, Вы писали:


D>>Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.


_>Если скорость не важна, то самое простое – это взять что либо физически случайное из компьютера.

_>Например показания датчиков (температур, скорости вентиляторов, напряжений), шум звуковой платы, асинхронность генераторов в СМОS и MB.

_>Я считаю, что очень хороший результат даёт RDTSC in CPU PENTIUM.

_>Точнее, хорим некоторое время, большее чем время между прерываниями, последовательные результаты RDTSC, затем хорим все биты результата и получаем случайный бит.

_>За счёт асинхронности современных компьютеров получается очень хороший результат.

_>Тесты это подтверждают.

_>Далее, берём таких битов столько, сколько надо, и получаем уверенно уникальный GUID. На 100 лет хватит 64 бит.


_>Пример с исходником (Генератор паролей) здесь:


_>http://www.isan.troitsk.ru/~panfilov/Rus/Programs.htm


Хм. Интересный способ. А на AMD процессорах работат?
Жаль что линка дохлая, очень интересно было бы взглянуть.
Re[3]: Альтернатива GUID
От: exp_1  
Дата: 08.05.05 07:25
Оценка:
Здравствуйте, Disappear, Вы писали:


D>Хм. Интересный способ. А на AMD процессорах работат?

D>Жаль что линка дохлая, очень интересно было бы взглянуть.

На АМД работает от К6 и выше. На К5 и ниже, типа AMD486 уже нет.

Странно, что линка не работает. Тогда попробуйте эту.

Вспомнились ещё способы получения шумов на PC:
Асинхронность вращения FD, CD, HD.
Использовался даже такой экзотический, как отключение автоматической регенерации RAM и шумоподобная порча данных в ней.

Если нужна скорость, то начальная часть GUID берётся уникальной, а остальная инкрементированием.

MS GUID содержит 128 бит.
Re[3]: Альтернатива GUID
От: pavel_turbin  
Дата: 08.05.05 15:15
Оценка:
Здравствуйте, Andrew_B, Вы писали:

A_B>делали как-то репликацию двух баз mssql,там uniqueidentifier-ы совпали


попробуйте использовать sequence number, как в Oracle. В этом случае ключи всегда уникальны.
Re[4]: Альтернатива GUID
От: Alex Alexandrov США  
Дата: 09.05.05 08:29
Оценка:
Здравствуйте, pavel_turbin, Вы писали:

_>Здравствуйте, Andrew_B, Вы писали:


A_B>>делали как-то репликацию двух баз mssql,там uniqueidentifier-ы совпали


_>попробуйте использовать sequence number, как в Oracle. В этом случае ключи всегда уникальны.


Sequence-ы здесь мало помогут. Если не ошибаюсь, в MSSQL guid-ы используются для генерации идентификаторов, уникальных между серверами. Распределенные сиквенсы в Oracle мне неизвестны. Там обычно эта задача решается соединением идентификатора, уникального локально, с неким раздаваемым централизованно идентификатором сервера БД.
[ Posted via RSDN@Home 1.1.4 beta 5 (395) listening to silent ]
It's kind of fun to do the impossible (Walt Disney)
Re: Альтернатива GUID
От: Andir Россия
Дата: 09.05.05 08:36
Оценка:
Здравствуйте, Disappear, Вы писали:

D>Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.


Если не сильно важна скорость, то можно сделать очень простую вещь.
Берём время, создаём из неё строку и хешируем её (SHA1, SHA256, SHA512 — выбирай нужную длину). Полученный результат используем.

Если будут сгенерированы два одинаковых числа, то взбудоражишь всё криптографическое сообщество, как было в прошлом году с SHA-0.

С Уважением, Andir!
Re[2]: Альтернатива GUID
От: Andir Россия
Дата: 09.05.05 08:44
Оценка:
Здравствуйте, Andir, Вы писали:

A>Если не сильно важна скорость, то можно сделать очень простую вещь.

A>Берём время, создаём из неё строку и хешируем её (SHA1, SHA256, SHA512 — выбирай нужную длину). Полученный результат используем.

Хотя конечно глобальной уникальности так не получить

С Уважением, Andir!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.