2010-05-25 3 views
2

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

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

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

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

+1

Как выглядит ваше использование данных? В основном читает и очень мало пишет, или есть много активности записи? –

+1

Использование процессора, пикирующего до 100%, является подозрительным. Большинство баз данных заканчиваются привязкой IO, а не ЦП. –

+0

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

ответ

3

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

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

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

0

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

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

Кэш запросов mysql хорош, но это не без issues. Один из больших - это автоматически истекает каждый раз, когда исходные данные изменяются, чего вы, вероятно, не хотите.

 Смежные вопросы

  • Нет связанных вопросов^_^