Forum Webscript.Ru

Программирование => Perl => Тема начата: Death от 13 Июня 2005, 19:37:10

Название: Создание уникального ключа
Отправлено: Death от 13 Июня 2005, 19:37:10
У меня в файл добавляются записи и мне нужно чтобы каждая запись имела свой уникальный ключ.
Как создать этот уникальный ключ?
Time() - не подходит (за одну секунду можно столько сделать), нужно что-то более надежное
Название: Создание уникального ключа
Отправлено: ondr от 13 Июня 2005, 20:07:35
каждая строка в файле сама по себе имеет уникальный ключ - порядковый номер. это не подойдёт?
Название: Создание уникального ключа
Отправлено: frenky от 14 Июня 2005, 00:37:18
ну если я правильно понял возми рандом от какгог нибудь 9-ти значного числа
Название: Создание уникального ключа
Отправлено: frenky от 14 Июня 2005, 00:40:39
и записывай в файл хэш или лучше сразу в dbm-ку   а там проверяй если ключ есть то делай другой
Название: Создание уникального ключа
Отправлено: Death от 14 Июня 2005, 09:21:27
Цитировать
Death:
ondr

Не подходит, так как нужно делать связь с неким файлом по уникальному ключу

Цитировать
frenky:
frenky

Очень долго работает и жрет памяти при например 10000 записей (єт насчет рендома). Что за dbm-ка?
Название: Создание уникального ключа
Отправлено: frenky от 14 Июня 2005, 12:35:51
ну обычная база данных которая намного быстрее текстового файла

ну механизм записи примерно такой:


get_lock(\'имя_нашей_базы\');
dbmopen(%az ,"имя_нашей_базы",0666) || die;

if ($az{$value}) {  тут создаем уникальный ключ value    }
if (! $az{$value}) {   $az{$value}="наши_даннве";          }


dbmclose(%az);
relase_lock(\'имя_нашей_базы\');



насчет уникальности : сделай так чтобы первый ключ єто 1   второй 2  третий 3 и так далее просто увеличиваю

проверять на уникальность будет очень удобно потому что у нас же хэш %az   тоесть ты перед тем как задавать ключ можешь проверить есть ли даннай ключ в массиве       @ключи= keys % az
Название: Создание уникального ключа
Отправлено: commander от 14 Июня 2005, 12:47:46
Death
#!/usr/bin/perl -w
use strict;
use Digest::MD5 qw(md5_hex);
my $time=time();
my $ID = sprintf("%d_%d", $time, rand($time));
print md5_hex($ID);
Название: Создание уникального ключа
Отправлено: cr4ck3r от 14 Июня 2005, 15:58:09
Цитировать
commander:
Death
#!/usr/bin/perl -w
use strict;
use Digest::MD5 qw(md5_hex);
my $time=time();
my $ID = sprintf("%d_%d", $time, rand($time));
print md5_hex($ID)

к $time можете добавить еще pid ($$), это еще сильней повысит случайность.
Например:

my $ID=sprintf("%d%d%d",$$,$time,rand($time));