Forum Webscript.Ru
Программирование => Perl => Тема начата: Death от 13 Июня 2005, 19:37:10
-
У меня в файл добавляются записи и мне нужно чтобы каждая запись имела свой уникальный ключ.
Как создать этот уникальный ключ?
Time() - не подходит (за одну секунду можно столько сделать), нужно что-то более надежное
-
каждая строка в файле сама по себе имеет уникальный ключ - порядковый номер. это не подойдёт?
-
ну если я правильно понял возми рандом от какгог нибудь 9-ти значного числа
-
и записывай в файл хэш или лучше сразу в dbm-ку а там проверяй если ключ есть то делай другой
-
Death:
ondr
Не подходит, так как нужно делать связь с неким файлом по уникальному ключу
frenky:
frenky
Очень долго работает и жрет памяти при например 10000 записей (єт насчет рендома). Что за dbm-ка?
-
ну обычная база данных которая намного быстрее текстового файла
ну механизм записи примерно такой:
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
-
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);
-
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));