Автор Тема: Создание уникального ключа  (Прочитано 4145 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Death

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 15
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Создание уникального ключа
« : 13 Июня 2005, 19:37:10 »
У меня в файл добавляются записи и мне нужно чтобы каждая запись имела свой уникальный ключ.
Как создать этот уникальный ключ?
Time() - не подходит (за одну секунду можно столько сделать), нужно что-то более надежное

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Создание уникального ключа
« Ответ #1 : 13 Июня 2005, 20:07:35 »
каждая строка в файле сама по себе имеет уникальный ключ - порядковый номер. это не подойдёт?
0 OK, 0:1

Оффлайн frenky

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 171
  • +0/-0
  • 0
    • Просмотр профиля
    • http://fdm.kiev.ua
Создание уникального ключа
« Ответ #2 : 14 Июня 2005, 00:37:18 »
ну если я правильно понял возми рандом от какгог нибудь 9-ти значного числа
____________________
[on-line football manager] fdm.kiev.ua

Оффлайн frenky

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 171
  • +0/-0
  • 0
    • Просмотр профиля
    • http://fdm.kiev.ua
Создание уникального ключа
« Ответ #3 : 14 Июня 2005, 00:40:39 »
и записывай в файл хэш или лучше сразу в dbm-ку   а там проверяй если ключ есть то делай другой
____________________
[on-line football manager] fdm.kiev.ua

Оффлайн Death

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 15
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Создание уникального ключа
« Ответ #4 : 14 Июня 2005, 09:21:27 »
Цитировать
Death:
ondr

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

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

Очень долго работает и жрет памяти при например 10000 записей (єт насчет рендома). Что за dbm-ка?

Оффлайн frenky

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 171
  • +0/-0
  • 0
    • Просмотр профиля
    • http://fdm.kiev.ua
Создание уникального ключа
« Ответ #5 : 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
____________________
[on-line football manager] fdm.kiev.ua

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Создание уникального ключа
« Ответ #6 : 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);
And no religion too...

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
Создание уникального ключа
« Ответ #7 : 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));
Ворота в perl - perlmonks.org.ru

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28