Честь php_memcached восстановлена

На днях на 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-запросы в Memcached

По горизонтали размер списка ключей, по вертикали ускорение достигнутое с помощью multi-функций по сравнению с циклом. Синий — set, красный — get.

Тест на особую чистоту не претендует, но динамика видна. multiSet превосходит простой set() в 1,5-3 раза, а вот multiGet значительно прибавляет на больших объёмах (вернее get в цикле сдаёт). На количестве ключей больше 20 ускорение достигает уже десятков раз.

2 комментария »

  • сам написал? ну красава ваще, не то что эта хуета!

    =)

    phpdude, 2.06.2010, 22:06

  • Сам долго возился с организацией на сайте мультигета и офигел от прироста скорости. Замеров на дам, потому что старых цифр не сохранилось, но разница раз в 150 на генерацию страницы включая работу с БД и генерацию HTML. Фактически время генерации страницы стало около .02 секунд. Без мемкэша при этом на одну страницу требуется около 500 запросов в БД.

    Вывод: потратить время и организовать подготовку к операции мальтигета с разбором результатов имеет смысл.

    Павел, 26.07.2010, 11:02

Leave a comment