Как снизить нагрузку на БД?

Есть скрипт тизерной сети, которая при запросе блока рекламы каждый раз обращается к БД. Это создает большую нагрузку на весь сервер. Собственно вопрос: как можно сделать, чтобы к БД делались запросы не каждый раз, а, например, 1 раз в определенный промежуток времени, и брались из кэша и при необходимости обновлялись?
Сервер: Intel® Core™ i7-3770, ОЗУ 32Гб.
  • Вопрос задан
  • 2417 просмотров
Решения вопроса 2
Берем какой-нибудь memcached.
У запроса в бд, есть какой-нибудь идентификатор для выборки.
Алгоритм такой:
  1. Смотрим в кэш по этому идентификатору
  2. В кэше есть данные, отдаем сразу
  3. Если там пусто, делаем запрос к БД, сохраняем результат в кэш, указывая "время жизни ключа" и отдаем данные
Ответ написан
Комментировать
nazarpc
@nazarpc
Open Source enthusiast
Скорее всего слишком частое обновление данных.
Суть в том, что если вы делаете обновление записи - это относительно сложная операция.
Вместо этого можно складывать в отдельную таблицу временные данные запросами вида:
INSERT DELAYED INTO table (col) VALUES ('val');
Которые будут срабатывать мгновенно, а потом, например, с помощью cron раз в пять минут обновлять таблицу с данными и удалять временные записи.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
Ложите все в очередь и уже потом разбираете хиты большими порциями.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы