07 апреля 2010

MD5, SHA1, UNIQID для генерации уникальных значений

  • написал: MpaK
  • 8
В целом задачи как таковой затестировать скорость генерации не было (я сразу выбрал md5 изначально), но попоже захотелось быстренький на глаз сделать тестик. Что же быстрее генерит «уникальные» значения, хэширует и т.п.

Где это интересно и применимо? Пока я только увидел в системах кэширования, именно там порой много раз приходится использовать хэш-функцию для генерации например уникального ключа соответствующего нашему запросу, названию файла, адресу страницы, блока и т.п.

Накидал по быстрому, может кому тоже будет интересно составить своё мнение.

Исходник:

$this->benchmark->mark('md5_start');
srand();
for($i=1;$i<=1000000;$i++){
	$md5 = md5( rand(1000000, 100000000) );
}
$this->benchmark->mark('md5_end');

$this->benchmark->mark('sha1_start');
srand();
for($i=1;$i<=1000000;$i++){
	$sha1 = sha1( rand(1000000, 100000000) );
}
$this->benchmark->mark('sha1_end');

$this->benchmark->mark('uniq_start');
srand();
for($i=1;$i<=1000000;$i++){
	$uniq = uniqid('', TRUE);
}
$this->benchmark->mark('uniq_end');

echo 'MD5: '.$this->benchmark->elapsed_time('md5_start', 'md5_end');
echo '<br />SHA1: '.$this->benchmark->elapsed_time('sha1_start', 'sha1_end');
echo '<br />UNIQ: '.$this->benchmark->elapsed_time('uniq_start', 'uniq_end');


5 простых запусков:
MD5: 3.5084
SHA1: 3.7793
UNIQ: 5.4813

MD5: 3.5653
SHA1: 4.2736
UNIQ: 6.7350

MD5: 3.5074
SHA1: 3.8155
UNIQ: 5.4090

MD5: 3.5645
SHA1: 3.8203
UNIQ: 5.4305

MD5: 3.5711
SHA1: 4.4750
UNIQ: 5.9159

Время в секундах, версия 5.2.11
+1

Комментарии:6

avatar
  • akhmetov
  • 07 апреля 2010, 13:51
  • 0
Предлагаю на тест одинарные кавычки против двойных :)
avatar
  • MpaK
  • 07 апреля 2010, 16:57
  • 0
гык :) я может педант, но я использую одинарные кавычки, когда точно не надо ничего внутри парсить… а так же не юзаю конкатенацию в echo, ибо зачем лишнее время тратить
avatar
Хм… я может чего-то не понял, но ведь у тебя и есть конкатенация в echo?

Я вот там запятые использую, по всем признакам должно быть куда быстрее, особенно на больших строках.
avatar
  • MpaK
  • 09 апреля 2010, 03:03
  • 0
гык :) аха, есть тут… это же так, просто от нефиг делать быстро для себя замерял :)
avatar
  • eye-ru
  • 07 апреля 2010, 16:06
  • 0
Генерация это лишь малая часть сценария использования их для кэширования данных, гораздо больший интерес к части где идет извлечение данных из кеша.
avatar
  • MpaK
  • 07 апреля 2010, 17:00
  • 0
да это понятно :) так же просто «выдуманный» тест, просто ради интереса и ясно, что можно найти запрос к базе сжирающий больше времени, а можно например на обработке сотни ключей и вычищении их из кэша убить чуток нехорошего времени :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.