За последние 24 часа нас посетили 15064 программиста и 1653 робота. Сейчас ищут 963 программиста ...

Кэширование SQL-запросов

Тема в разделе "PHP для новичков", создана пользователем Vitas, 4 апр 2008.

  1. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Хочу сделать кэширование SQL-запросов, вопрос: как отслеживать изменения в таблицах?
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    например:
    есть кеширование в самом mysql
    можно хранить время изменения в отдельной таблице - выборка будет одним быстрым запросом, а не набором более тяжелых.
     
  3. Goryn

    Goryn Активный пользователь

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    Отслеживать изменения в таблицах можно с помощью триггеров. Либо использовать их для заполнения отдельной таблицы как предложил armadillo
     
  4. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Goryn
    Без использования волшебных бубнов типа тригеров и бла бла бла - никак. (Да и то, тригеры работают для базы, а кеш будет явно не в базе), вообщем забейте на это предложение.

    Кеш SQL запросов делается примерно так:
    * При SELECT надо проверять есть-ли кеш, и если его нету - создавать. Я лично делаю через memcache или XCache задаю TTL для него, что-бы он автоматом обновлялся через заданный интервал.
    * При INSERT, DELETE, UPDATE в коде вызывать функцию/метод удаления кеша - это необходимо в случае если обновление должно показатся незамедлительно везде (т.е. надо грохнуть все кеши, данные в которых зависят от делаемого действия).

    Лично я использую два подхода - с интервалом (не обновляю кеш сразу по изменении данных), т.к. вряд-ли кто-то заметит что данные обновились не сразу, а с задержкой в 2-3 минуты. Или когда при изменении данных грохаю кеш сразу там где нужно незамедлительное обновление данных (к примеру сессия пользователя - они у меня на memcache сидят). Всё это логика приложения.