FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9176
Вход
Генератор Уникальных значений GUID

Генератор GUID позволяет АВТОНОМНО создавать УНИКАЛЬНЫЕ значения на ИЗОЛИРОВАННЫХ информационных уровнях с быстродействием до 10000 значений в секунду. Полученные значения упакованы в 8 (или 10) байт, упорядочиваются по возрастанию в хронологическом порядке создания и имеют возможность восстановления даты создания. Удобный способ создания ПЕРВИЧНЫХ КЛЮЧЕЙ. 19.11.2001 добавлены функции TimFromGuid() и SecFromGuid().


 
Прислал: Дм.Баянов   Категория: Инструменты разработчика


Генератор Уникальных значений GUID

Известен метод получения GUID, разработанный фирмой Microsoft , Contributions by John Desch. Этот метод создает неупакованное значение GUID длиной в 38 байт, и декларирует наличие защиты от дублирования значений на изолированных системах при автономном вызове функции '... returns a unique value: that is, no other invocation, on the same or any other system (networked or not), should return the same value...'.

Предлагаемый здесь улучшенный метод получения компактного надежного GUID для изолированных систем строит упакованное значение длиной в 8 или 10 байт, имеет открытую описанную физическую модель построения. Значение создается на основе следующих компонент:
  • Временных отметок (вместимость до 20 лет),
  • Идентификтатора программной Сессии и Аппаратного идентификатора (HDD),
  • (Опционально) дополнительного кода от генератора случайных чисел (10-байтовый GUID).
Для реального использования достаточен вариант 8-байтового GUID, т.к. вероятность дублирования значения на той же микросекунде после сдвига часов хотя и ненулевая, но мизерно мала. Улучшенный 10-байтовый метод (с доп. случайным кодом) сводит такую вероятность фактически к нулю, хотя требует дополнительно два байта в значении.

В значении GUID используются только неконфликтующие символы ASCII, доступные для ввода с клавиатуры. Метод генерации является базовым в проекте DBRAD32 (www.dbrad32.narod.ru) при создании первичных ключей, классов справочников, отношений, подсвеченных строк в локальных сессиях, идентификаторов объектов и т.п. Надежность метода проверена на протяжении 5-ти лет.

Приложенный файл архива guid.zip содержит два файла - guid.doc (комментарий)и guid.prg (исходный код функций). Для проверки достаточно просто запустить guid.prg. Для использования генератора GUID в своем приложении необходимо скопировать в него текст функций, в начале приложения инициализировать генератор однократным вызовом функции IniGenGuid() и затем получать значение GUID вызовом функции Guid(). Функции DatFromGuid() и TimFromGuid() позволят получить дату и время создания значения.

 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.886) Вложение [15.42]kb
Дополнения пользователей
Генератор Уникальных значений GUID
[+][?]
P.Ol.
06.11.01 17:07:22

При нормальных условиях работы, GUID действительно будет создовать уникальные значения.
Но при не совсем нормальных (юзер захотел сделать проводку задним числом, для чего перевел
системную дату назад:), могут возникнуть проблемы.
Dronik
08.11.01 09:29:16

id программой сессии предназначен для подобных ситуаций
Доброжелатель
13.11.01 09:07:20

Уважаемый P.O. ! Для описанной вами ситуации можете использовать 10-байтовый метод GUID повышенной
надежности, в котором при каждом вызове генератора довешивается хвост случайного кода в два байта.
Доброжелатель
20.11.01 09:57:08

Хорошая весчь, полезная и нужная. Именно то чего не хватало. Т.к. sys(2015) не зависит от
системного времени, а простое сложение времени + даты в строку не дает нужной разрешающей
способности при таком же размере. Плюс еще и возможность обратного получения момента времени.
Вобщем спасибо за ценный инструмент :-))).
Kurbatov Dmitry
28.01.02 10:18:44

Интересует мнение ALL.
При пользовании этой процедурой перед сохранением
сгенерированного ключа надо ли проверять ключевое поле,
может такой ключ есть ? Или 20 лет смело, без проверки ?

birza
28.01.02 17:09:21

Можно смело без проверки - в этом и идея алгоритма.
Plisenko Olga
29.03.04 12:02:43

Алгоритм без сомнения полезный! 
Но, я не постоянно программирую на FoxPro, и эта среда разработки мне нужна только для создания
базы данных, но не приложения. В дальнейшем созданную здесь базу данных планируется использовать в
другом уже готовом приложении, которое имеет свой язык, однако средства для работы с базами данных
у него недостаточны (по крайней мере для создания уникального ключа). Как использовать вашу
процедуру только в БД .
Plisenko Olga
31.03.04 15:11:21

Алгоритм без сомнения полезный! 
Но, я не постоянно программирую на FoxPro, и эта среда разработки мне нужна только для создания
базы данных, но не приложения. В дальнейшем созданную здесь базу данных планируется использовать в
другом уже готовом приложении, которое имеет свой язык, однако средства для работы с базами данных
у него недостаточны (по крайней мере для создания уникального ключа). Как использовать вашу
процедуру только в БД .
Add
20.05.05 09:19:20

Алгоритм без сомнения прекрастный!

В описании сказано:
Функции DatFromGuid() и TimFromGuid() позволят получить дату и время создания значения.
Дак вот у меня с датой проблем нет, а вот со временем
существуют некоторые непонимания, в частности не могу
найти функцию SecFromGuid(cGuidValue) 
(её вызов находится в ф-ии TimFromGuid())

Помогите...!
mailto:add@tut.by
Add
23.05.05 12:59:41

Всё! Нашёл!
Maxnoskov
30.11.05 12:34:59

Подскажите пожалуйста, как связать эту функцию с ключевым полем таблицы
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика