MySQL кеш запросов против кэширования наборов результатов на прикладном уровне - PullRequest
2 голосов
/ 25 мая 2010

Я использую php / mysql-управляемый веб-сайт с большим количеством посещений, и я рассматриваю возможность кэширования наборов результатов в общей памяти, чтобы уменьшить нагрузку на базу данных.
Тем не менее, сейчас кеш запросов MySQL включен, и, похоже, он работает довольно хорошо, поскольку, если я отключаю кеширование запросов, использование ЦП сразу же переходит на 100%.
Учитывая эту ситуацию, я не знаю, приведет ли кеширование наборов результатов (или даже сгенерированного HTML-кода) локально в разделяемой памяти с PHP к какому-либо заметному улучшению производительности.

Есть ли у кого-нибудь опыт по этому вопросу?

PS: Пожалуйста, не предлагайте решения для тяжелой артиллерии, такие как memcached. Сейчас я ищу простые решения, которые не требуют слишком много времени для внедрения, развертывания и обслуживания.

Edit:
Я вижу свой комментарий о отклоненных ответах memcached от фактической точки зрения, которая заключается в том, приведет ли кеширование запросов к БД на прикладном уровне к заметному влиянию производительности, учитывая, что результат этих запросов уже кэшируется на уровне БД.

Ответы [ 2 ]

3 голосов
/ 25 мая 2010

Я знаю, что вы не хотели слышать о memcached, но - это одно из лучших решений для того, что вы пытаетесь сделать. В зависимости от использования вашего сайта, производительность может значительно возрасти. Просто используя обработчик сеанса memcached над обработчиком сеансов базы данных, я смог сократить нагрузку пополам и сократить время обслуживания запросов более чем на 30%.

Реально memcached - это простое решение. Он уже интегрирован с PHP (если у вас загружено расширение), и он практически не требует настройки (мне просто нужно было добавить memcached в качестве службы на моем компьютере с Linux, что выполняется одной или двумя командами оболочки).

Я бы предложил хранить данные сеанса (и все, что можно кэшировать) в memcache. Для динамических страниц (таких как домашняя страница с переполнением стека) я бы рекомендовал кэшировать вывод на пару секунд, чтобы предотвратить переполнение.

0 голосов
/ 25 мая 2010

Приличное решение с одним блоком - это кэширование на основе файлов, но вы должны удалить их вручную. Кроме этого, вы можете использовать APC, который работает очень быстро и в оперативной памяти (тем не менее, его срок действия истекает самостоятельно).

Однако, как только вы масштабируете один веб-сервер, вам понадобится общий кеш, который кэшируется в memcached. Почему вы так непреклонны в том, чтобы не развертывать это? Это не сложно, и это просто поможет вам сэкономить время в будущем. Вы можете либо начать использовать memcache сейчас и покончить с этим, либо использовать один из вышеперечисленных методов сейчас, а затем в конечном итоге переключиться на memcache позже, что приведет к еще большей работе. Кроме того, вам не нужно иметь дело с запуском cronjob или каким-то другим уродливым хаком, чтобы получить функции истечения срока действия кэша: он сделает это за вас.

Кеш запросов MySQL хорош, но не без проблем . Один из важных моментов - он истекает автоматически каждый раз при изменении исходных данных, что, вероятно, вам не нужно.

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