07 апреля 2010
MD5, SHA1, UNIQID для генерации уникальных значений
В целом задачи как таковой затестировать скорость генерации не было (я сразу выбрал md5 изначально), но попоже захотелось быстренький на глаз сделать тестик. Что же быстрее генерит «уникальные» значения, хэширует и т.п.
Где это интересно и применимо? Пока я только увидел в системах кэширования, именно там порой много раз приходится использовать хэш-функцию для генерации например уникального ключа соответствующего нашему запросу, названию файла, адресу страницы, блока и т.п.
Накидал по быстрому, может кому тоже будет интересно составить своё мнение.
Исходник:
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
Где это интересно и применимо? Пока я только увидел в системах кэширования, именно там порой много раз приходится использовать хэш-функцию для генерации например уникального ключа соответствующего нашему запросу, названию файла, адресу страницы, блока и т.п.
Накидал по быстрому, может кому тоже будет интересно составить своё мнение.
Исходник:
$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
- MpaK
- 07 апреля 2010, 16:57
- 0
гык :) я может педант, но я использую одинарные кавычки, когда точно не надо ничего внутри парсить… а так же не юзаю конкатенацию в echo, ибо зачем лишнее время тратить
- dark_barker
- 08 апреля 2010, 15:39
- 0
Хм… я может чего-то не понял, но ведь у тебя и есть конкатенация в echo?
Я вот там запятые использую, по всем признакам должно быть куда быстрее, особенно на больших строках.
Я вот там запятые использую, по всем признакам должно быть куда быстрее, особенно на больших строках.
- MpaK
- 09 апреля 2010, 03:03
- 0
гык :) аха, есть тут… это же так, просто от нефиг делать быстро для себя замерял :)
- eye-ru
- 07 апреля 2010, 16:06
- 0
Генерация это лишь малая часть сценария использования их для кэширования данных, гораздо больший интерес к части где идет извлечение данных из кеша.
- MpaK
- 07 апреля 2010, 17:00
- 0
да это понятно :) так же просто «выдуманный» тест, просто ради интереса и ясно, что можно найти запрос к базе сжирающий больше времени, а можно например на обработке сотни ключей и вычищении их из кэша убить чуток нехорошего времени :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Комментарии:6