Здравствуйте, Disappear, Вы писали:
D>Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.
Если скорость не важна, то самое простое – это взять что либо физически случайное из компьютера.
Например показания датчиков (температур, скорости вентиляторов, напряжений), шум звуковой платы, асинхронность генераторов в СМОS и MB.
Я считаю, что очень хороший результат даёт RDTSC in CPU PENTIUM.
Точнее, хорим некоторое время, большее чем время между прерываниями, последовательные результаты RDTSC, затем хорим все биты результата и получаем случайный бит.
За счёт асинхронности современных компьютеров получается очень хороший результат.
Тесты это подтверждают.
Далее, берём таких битов столько, сколько надо, и получаем уверенно уникальный GUID. На 100 лет хватит 64 бит.
Здравствуйте, nen777w, Вы писали:
N>Случайные числа получаемые из шумов/сигнала в Aux-е твоей звуковой N>карты. Очень даже хороший генератор.
Охотно верю что это хороший генератор. Только не уверен что он может давать абсолютную уникальность.
Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.
Здравствуйте, Disappear, Вы писали:
D>Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.
Чем конкретно не устраивает GUID?
[ Posted via RSDN@Home 1.1.4 beta 5 (395) listening to silent ]
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, Alex Alexandrov, Вы писали:
AA>Здравствуйте, Disappear, Вы писали:
D>>Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.
AA>Чем конкретно не устраивает GUID?
А всем вроде устраивает. Просто интересно, может существуют подобные алгоритмы.
Здравствуйте, wildwind, Вы писали:
W>Здравствуйте, Disappear, Вы писали:
D>>Только хочется, что-нибудь отличное от GUID.
W>Сгенерируй GUID и сделай с ним что-нибудь. Переставь байты например.
Здравствуйте, Disappear, Вы писали:
D>Дык ведь повторяются.
Не понял. Если они высокого качества, то вероятность совпадения двух длинных случайных чисел равна нулю.
В жизни кaждoгo челoвекa бывaют приятные мoменты, кoгдa oн чувствует себя пoлным идиoтoм. Приятнoсть этих мoментoв в пoстижении истины.
Здравствуйте, sugarde, Вы писали:
S>Здравствуйте, sugarde, Вы писали:
S>Нет. Бред, не равна нулю, но стремится к нему.
Да, кажется что-то подобное писал Кнут ...
но нет ли все-таки какого либо испробованного алгоритма, который устремляет эту вероятность к 0 ?
Или хотябы какого порядка должны быть эти качественные случайные числа, чтобы устремить эту вероятность куда надо?
Здравствуйте, nen777w, Вы писали:
S>>>Генератор случайных чисел? D>> Дык ведь повторяются.
N>Случайные числа получаемые из шумов/сигнала в Aux-е твоей звуковой N>карты. Очень даже хороший генератор.
А если на компе нет звуковой карты. Например это глухонимой безвидяшный сервер.
Здравствуйте, Disappear, Вы писали:
D>Да, кажется что-то подобное писал Кнут ... D>но нет ли все-таки какого либо испробованного алгоритма, который устремляет эту вероятность к 0 ? D>Или хотябы какого порядка должны быть эти качественные случайные числа, чтобы устремить эту вероятность куда надо?
Насколько я помню, в GUID используется время, номер сетевой карты или случайное число.
Умноженная вероятность совпадения некого случайного числа по любому алгоритму и его одновременного создания с точностью до милисекунды.
( правда в генераторах случайных чисел тоже использется время) достаточно мала.
Опять же чем длиннее число тем вероятность меньше.
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
и солнце б утром не вставало, когда бы не было меня
D> А если на компе нет звуковой карты. Например это глухонимой безвидяшный сервер.
Записать этот шум в WAVE файл и выбирать оттуда, файлов много можно
сделать, можно ещё сворачивать шум с шумом.
Извращение, и не совсем случайно, но шо делать в таком сл.
Здравствуйте, Disappear, Вы писали:
D>Здравствуйте, nen777w, Вы писали:
S>>>>Генератор случайных чисел? D>>> Дык ведь повторяются.
N>>Случайные числа получаемые из шумов/сигнала в Aux-е твоей звуковой N>>карты. Очень даже хороший генератор.
D>А если на компе нет звуковой карты. Например это глухонимой безвидяшный сервер.
А если на машине нет сетевухи, то GUID использует таймер. Можно что-то в этом роде. Просто звук — еще надежнее, чем таймер.
Если программист в рабочее время играет, значит —
либо у него мало работы и большая зарплата,
либо у него много работы и маленькая зарплата.
Здравствуйте, kost-BebiX, Вы писали:
KB>Здравствуйте, Disappear, Вы писали:
D>>Здравствуйте, nen777w, Вы писали:
S>>>>>Генератор случайных чисел? D>>>> Дык ведь повторяются.
N>>>Случайные числа получаемые из шумов/сигнала в Aux-е твоей звуковой N>>>карты. Очень даже хороший генератор.
D>>А если на компе нет звуковой карты. Например это глухонимой безвидяшный сервер.
KB>А если на машине нет сетевухи, то GUID использует таймер. Можно что-то в этом роде. Просто звук — еще надежнее, чем таймер.
Почему? У тебя есть статистика по распределению цифр в зависимости от шумов?
Здравствуйте, Andrew_B, Вы писали:
A_B>делали как-то репликацию двух баз mssql,там uniqueidentifier-ы совпали
Интересно. Я не большой знаток в области генерации GUID-ов, но был уверен, что это невозможно. Основными элементами уникальности, насколько я знаю, являются MAC-адрес сетевой карты и показания системных часов. Неужели реплицируемые без ethernet-а были?
[ Posted via RSDN@Home 1.1.4 beta 5 (395) listening to silent ]
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, 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 процессорах работат?
Жаль что линка дохлая, очень интересно было бы взглянуть.
D>Хм. Интересный способ. А на AMD процессорах работат? D>Жаль что линка дохлая, очень интересно было бы взглянуть.
На АМД работает от К6 и выше. На К5 и ниже, типа AMD486 уже нет.
Странно, что линка не работает. Тогда попробуйте эту.
Вспомнились ещё способы получения шумов на PC:
Асинхронность вращения FD, CD, HD.
Использовался даже такой экзотический, как отключение автоматической регенерации RAM и шумоподобная порча данных в ней.
Если нужна скорость, то начальная часть GUID берётся уникальной, а остальная инкрементированием.
Здравствуйте, 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)
Здравствуйте, Disappear, Вы писали:
D>Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.
Если не сильно важна скорость, то можно сделать очень простую вещь.
Берём время, создаём из неё строку и хешируем её (SHA1, SHA256, SHA512 — выбирай нужную длину). Полученный результат используем.
Если будут сгенерированы два одинаковых числа, то взбудоражишь всё криптографическое сообщество, как было в прошлом году с SHA-0.
Здравствуйте, Andir, Вы писали:
A>Если не сильно важна скорость, то можно сделать очень простую вещь. A>Берём время, создаём из неё строку и хешируем её (SHA1, SHA256, SHA512 — выбирай нужную длину). Полученный результат используем.
Хотя конечно глобальной уникальности так не получить