Тесты производительности различных cache storage


Version 0.4

Ну вот опять!

Передо мной в данный момент стоит задача сравнить популярные бытрые хранилища данных, основанные на использовании оперативной памяти. Найденные сравнения(например, вот это) не совсем подходят, так как необходима информация не только о скорости get/set операций, но и о add/delete (их предполагается использовать для создания мьютексов).

На самом деле целей тестирования две:

  1. Найти самый быстрый и удобный cache storage, с которым можно взаимодействовать из PHP-шного расширения напрямую, а не через сокеты, как у memcached.
  2. Оценить разницу в скорости, между хранилищем из пункта 1 и memcached.

Итак в тестировании участвуют:

Идут лесом:

Тестирование проводилось с помощью немного измененного пакета limb/cache. Этот пакет позволит (я надеюсь ;) в случае нехватки памяти на application-сервере, легко и непринуждённо (всего одна бессоная ночь) перейти на memcached.

Кто на свете всех быстрее, и румяней, и милее.

В этой номинации сравнивались APC и XCache, как самые известные, и исходя из других моих сексуальных предпочтений: я больше люблю заниматься им с девушками, чем с библиотеками, которые вдруг перестали поддерживаться или начали конфликтовать с другим софтом. В общем APC и XCache я больше доверяю.

Загадочные цифры – это количество совершаемых операций в секунду.

add get set delete
APC / integer 111231 150792 96590 154379
XCache / integer 40342 99218 56146 114956
diff 176% 52% 72% 34%
APC / array 51547 90296 42422 92647
XCache / array 23091 68078 43226 84848
diff 123% 33% -2% 9%
APC / object 20373 20743 19542 122401
XCache / object* 10598 14100 15355 75741
diff 92% 47% 27% 62%

* – В ходе тестирования выяснилось, что XCache не умеет работать с объектами, и их ему приходится отдавать в уже сериализованном виде. Это, конечно решается с помощью собственного драйвера, но “осадок остался” (с).

APC рулит! Поэтому и войдет в PHP6 ;)

Выходи memcached – биться будем!

add get set delete
APC / integer 111231 150792 96590 154379
Memcached / integer 6679 8436 6667 9304
diff 1565% 1687% 1349% 1559%
APC / array 51547 90296 42422 92647
Memcached / array 6783 8319 6854 9142
diff 660% 985% 519% 913%
APC / object 20373 20743 19542 122401
Memcached / object 5088 5648 5143 9081
diff 300% 267% 280% 1248%

Выводы делаейте сами, а я спать пойду.

Исходники тестов можно скачать и поправить ;)

Несколько комментариев

  1. zorg пишет:

    А чем shmop не устроил?

  2. Станислав пишет:

    Залил новый архив.

  3. Alrond пишет:

    архив битый, и можно запаковать без симлинков?

  4. Станислав пишет:

    >очень зря eaccelerator не попробовали.
    >что значит cli-режим?
    CLI- Command Line Interface
    Мы не можем без CLI, у нас много offline-скриптов, которые должны работать с кэшом.

  5. umask00 пишет:

    очень зря eaccelerator не попробовали.

    что значит cli-режим?

  6. cd пишет:

    Понятно, спасибо за ответ.

  7. Станислав пишет:

    На самом деле у этого сравнения было две цели:
    1. Выбрать локальный cache storage
    2. Узнать насколько выбранный локальный быстрее memcached, чтобы решить, стоит ли делать цепочку кэшей скрипт->локальный кэш->Memcached.

  8. cd пишет:

    На мой взгляд при таком подходе достаточно было сравнивать xcache + apc
    Т.к. memcache все таки используют в роли кэша между серверами. При основной операции get().

    Понятно что реализация записи в память будет эффективней записи черзе tcp-ip.

Оставить комментарий