Как кэшировать тяжелые операции базы данных в php при обновлении базы - PullRequest
0 голосов
/ 06 августа 2011

Как кэшировать тяжелую страницу базы данных (почти 12 таблиц, на которую она ссылается), чтобы я

  1. Всегда давал пользователю самую последнюю страницу
  2. У меня есть кэшированный вывод HTML страницыдля вывода.

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

Наличие метки времени, совпадающей с тем, когда была обновлена ​​строка, будет снова тяжелым, поскольку имеется 12 таблиц (каждая страница ссылается на 1 строку вих) и это так же хорошо, как генерировать его динамически.Кроме того, код уже написан, и было бы очень трудно выполнить каждую отдельную операцию, которая может вставить / обновить / удалить таблицы.

1 Ответ

1 голос
/ 16 сентября 2011

Вам нужно денормализовать структуру вашей базы данных ... Самый безболезненный метод - это создать некоторые таблицы "кеша", в которых будут отображаться только те столбцы, которые будут отображаться ... Таким образом, у вас будет примерно на 70% меньше таблиц и полей ... Меньше объединений, умные индексы ...

После этого вам нужно написать задание cron, которое синхронизирует эти таблицы кеша с реальными. Вы можете добавить несколько полей флагов (например, is_modified или date_last_modified и т. Д.) В свои реальные таблицы и обновить эти поля с помощью триггеров. После этого ваша работа cron будет видеть то, что прошло с вашими реальными таблицами, например. в течение последних 2-3 минут и будет соответственно синхронизировать эти таблицы ...

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

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