Как измерить производительность кеша Django? - PullRequest
4 голосов
/ 06 мая 2009

У меня довольно маленький (около 4,5 тыс. Просмотров страниц в день) сайт, работающий на Django, с PostgreSQL 8.3 в качестве базы данных.

Я использую базу данных в качестве кеша и сервера базы данных. Я слышал много хорошего об использовании Memcached для этой цели, и я определенно хотел бы попробовать. Тем не менее, я хотел бы точно знать, каковы будут преимущества такого изменения: я полагаю, что мой сайт может быть недостаточно большим, чтобы бэкэнд лучшего кэша имел значение. Дело в том, что не я буду устанавливать и настраивать memcached, и я не хочу тратить чье-то время впустую или очень мало.

Как я могу измерить накладные расходы, используя db в качестве бэкэнда кеша? Я посмотрел на django-debug-toolbar, но если я правильно понимаю, это не то, что вы хотели бы поместить на рабочий сайт (для работы нужно установить DEBUG=True). К сожалению, я не могу полностью воспроизвести производственную настройку на своем ноутбуке (у меня другая ОС, процессор и намного больше оперативной памяти).

Кто-нибудь тестировал разные бэкэнды Django для кеша / сессии? Кто-нибудь знает, какая разница в производительности, если бы я делал, например, одну запись сеанса на каждый запрос?

Ответы [ 5 ]

5 голосов
/ 06 мая 2009

На моей предыдущей работе мы пытались измерить влияние кэширования на сайт, который мы разрабатывали. На той же машине мы провели нагрузочное тестирование набора из 10 страниц, которые чаще всего используются в качестве стартовых страниц (списки объектов), а также некоторые страницы сведений об объектах, взятые случайным образом из пула ~ 200000. Разница составляла от 150 запросов в секунду до 30000 запросов в секунду, а количество запросов к базе данных снизилось до 1-2 на страницу.

Что было кешировано:

  • сессий
  • списки объектов, найденных для каждой отдельной страницы в списке объектов
  • вторичные объекты и общий контент (находится на каждой странице)
  • списки категорий объектов и другие классифицирующие свойства
  • счетчики объектов (рассчитываются в автономном режиме по заданию cron)
  • отдельные объекты

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

3 голосов
/ 19 марта 2016

Проект DiskCache публикует тесты кеша Django , сравнивающие локальную память, Memcached, Redis, на основе файлов и diskcache.DjangoCache . Дополнительным преимуществом DiskCache является отсутствие необходимости в отдельном процессе (в отличие от Memcached и Redis). Вместо этого ключи кэша и небольшие значения отображаются в памяти в памяти процесса Django. Получение значений из кэша обычно происходит быстрее, чем Memcached на localhost. Ряд настроек контролируют, сколько данных хранится в памяти; остальное выводится на диск.

2 голосов
/ 06 мая 2009

Краткий ответ: Если у вас достаточно оперативной памяти, memcached будет всегда быстрее. Вы не можете реально сравнить memcached с кэшем базы данных, просто имейте в виду, что большим узким местом с серверами является доступ к диску, особенно к записи.

В любом случае, кеш диска лучше, если у вас есть много объектов для кеширования и долгое время истечения. Но для этой ситуации, если вы хотите выступлений на концертах, лучше генерировать ваши страницы статически с помощью скрипта Python и доставлять их с помощью ligthtpd или nginx.

Для memcached вы можете настроить количество оперативной памяти, выделенной для сервера.

0 голосов
/ 24 января 2015

Используйте django-debug-toolbar чтобы узнать, сколько времени было сэкономлено на SQL запросе

0 голосов
/ 21 января 2010

Просто попробуйте. Используйте firebug или аналогичный инструмент и запустите memcache с небольшим объемом оперативной памяти (например, 64 МБ) на тестовом сервере.

Отметьте свои средние результаты загрузки, увиденные в firebug без memcache, затем включите кэширование и отметьте новые результаты. Это сделано так просто, как и было сказано.

Результаты, как правило, шокируют людей, потому что производительность поднимается очень хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...