На днях на highload.com.ua появилась статья сравнивающая два php-расширения для работы с Memcached. Старое php_memcache и относительно новое php_memcached.
Среди прочего был приведен тест производительности, который внёс сумятицу в стройные ряды поклонников нового расширения. По нему получалось, что php_memcached умудрился стать втрое медленнее php_memcache.
Я позволил себе усомниться в таком беспределе и после совместных разбирательств выяснилось, что проблема непонятно в чём, но только не в расширении.
По новым данным оба расширения показывают одинаковые скорости, даже php_memcached немного быстрее. Что и понятно: запрос к серверу с данными может тратить время много где, но только не в интерфейсной библиотеке.
Так что пользуйтесь новым расширением без боязни. Или можете проверить у себя либо тест из статьи, либо мой тест. Результаты желательно показать.
Результаты моего теста на Ubuntu 9.10, PHP 5.3.2, Memcached 1.2.8:
Memcache Memcached set-new 189 193 set-exists 194 183 get-exists 181 175 get-empty 180 159 delete-exists 179 171 delete-empty 177 161 |
Числа — микросекунды на один запрос. *-exists операции над существующими ключами, остальные — над отсутствующими.
Как видно, один хрен, как для разных расширений, так и для запросов к существующим и несуществующим ключам.
Multi-запросы
Раз уж начали тесты, то протестируем заодно ещё одну фичу: мульти-запросы. Сравнивать расширения по ним здесь не придётся, так как в старом такой возможности просто нет.
Сравнивается запись/выборка набора ключей. С помощью setMult()/getMulti()
и по старинке в цикле по всем элементам.
Пример результата:
Test for 100 keys Single Multi / Set 231 111 2,1 Get 187 7 26,7
Внимание на график:
По горизонтали размер списка ключей, по вертикали ускорение достигнутое с помощью multi-функций по сравнению с циклом. Синий — set, красный — get.
Тест на особую чистоту не претендует, но динамика видна. multiSet превосходит простой set() в 1,5-3 раза, а вот multiGet значительно прибавляет на больших объёмах (вернее get в цикле сдаёт). На количестве ключей больше 20 ускорение достигает уже десятков раз.
сам написал? ну красава ваще, не то что эта хуета!
=)
phpdude, 2.06.2010, 22:06
Сам долго возился с организацией на сайте мультигета и офигел от прироста скорости. Замеров на дам, потому что старых цифр не сохранилось, но разница раз в 150 на генерацию страницы включая работу с БД и генерацию HTML. Фактически время генерации страницы стало около .02 секунд. Без мемкэша при этом на одну страницу требуется около 500 запросов в БД.
Вывод: потратить время и организовать подготовку к операции мальтигета с разбором результатов имеет смысл.
Павел, 26.07.2010, 11:02