Сохранение в реальном времени просмотров кэшированного контента - PullRequest
1 голос
/ 21 июня 2010

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

Все, что я могу придумать, - это создать другую таблицу для представлений и регулярно обновлять исходную таблицу с помощью задания cron. Я уверен, что это сократит время обновления, но я не уверен, что это лучший способ.

1 Ответ

0 голосов
/ 21 июня 2010

Что касается вашего вопроса, есть три варианта:

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

  2. Используйте запись через кеш.Всякий раз, когда вы «добавляете» или «удаляете» сообщение, также генерируйте кэшированные данные для этого элемента.Это может быть сложно, в зависимости от того, как работает ваша система кеширования, но это вариант.

  3. Отменить кеш при записи.Когда бы «добавить» или «удалить» сообщение, удалите кэшированные данные для этих сообщений.Таким образом, при следующем запросе их из кеша кеш будет заполнен.Это может быть или не быть простым, так как может быть нетривиально определить, какие кэшированные элементы ссылаются на узел БД (может потребоваться добавление дополнительной информации или объектов мета-кэша для отслеживания этих данных).1015 *

    Теперь, с учетом сказанного, я нахожу странным, что один запрос становится проблемой производительности.Более вероятно, что один запрос должен быть оптимизирован, или ваш сервер MySQL должен быть оптимизирован.Я регулярно вижу более 5 000 запросов в секунду на некоторых из моих производственных серверов, и у меня нет проблем с нагрузкой.Это потому, что эти запросы очень эффективны, и у меня в MySQL включено Кеширование запросов (это более эффективно, чем вы думаете) ...

...