PHP. Правильно ли кэшировать запросы MYSQL в txt-файле?

Я создаю интернет-магазин и стараюсь повысить производительность, сводя к минимуму запросы MYSQL.

Хорошо ли кэшировать запросы mysql через txt-файл, а затем извлекать это вместо запроса? Это то, что я делаю "

  1. Класс php принимает sql-запрос как строку
  2. делает md5 этого
  3. если это первый раз, когда он запускается
  4. затем выполнить запрос в базе данных
  5. получить результаты в массиве
  6. сериализуйте массив и сохраните его как md5_Of_Query.txt
  7. верните либо unserialize (file_get_contents (md5_of_Query.txt)), либо $ результаты фактического запроса, в зависимости от того, существует или нет кеш-код.
  8. Класс также проверяет filemtime () файла txt и, если его больше, чем говорят, один час, затем повторите запрос и обновите кеш.

Является ли это более эффективным, чем выполнение sql-запросов каждый раз? Любые проблемы с безопасностью, которые я пропускаю?

Если вы только запускаете приложение, memcache намного быстрее, чем использование текстовых файлов.

http://memcached.org/

Текстовые файлы будут выполнять эту работу, и описанные вами шаги имеют смысл, но memcache будет быстрее и справится с большой тягой для вас.

Если вы сделаете тест, затраты на создание уникального хеша и выполнение ввода-вывода на диск будут больше, чем просто выборка с сервера MySQL.

ИМХО, не беспокойтесь. Хорошие мысли, но MySQL уже имеет внутреннее кэширование и настройку производительности.

Сосредоточьтесь на создании своего приложения, так как «преждевременная оптимизация – это корень всего зла».

Ваш метод немного похож на перенос проблемы из одного угла в другой.

Введение кеша не улучшает производительность Mysql. Лучше посмотрите, какие запросы на самом деле медленны, а затем оптимизируйте запросы.

http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html

Если вы хотите добиться кеширования с учетом будущей масштабируемости, я бы рекомендовал настроить службы RESTful, которые запускают запросы в базе данных, а затем используя функции кеширования HTTP вашего веб-сервера для кэширования результатов. Шаги будут выглядеть так:

  1. Исходная страница должна запускать запрос
  2. Он генерирует HTTP-запрос GET для URL-адреса службы, передающего параметры в качестве параметров запроса в URL-адресе
  3. PHP-скрипт, расположенный в URL-адресе, принимает параметры запроса, проверяет их и добавляет в запрос MySql
  4. Сценарий запускает запрос в базе данных
  5. Сценарий сериализует результат и устанавливает его как вывод
  6. Веб-сервер кэширует ответ для запроса и возвращает его для будущих запросов с тем же URL-адресом
  7. Исходная страница использует сериализованные результаты службы для генерации HTML-кода

Подробнее о кешировании PHP с Apache можно узнать здесь . То, что вы сейчас делаете, близко к этому, но ваше приложение сможет лучше масштабироваться с помощью сервис-ориентированного подхода.

Просто захотелось взвесить в моих двух центах, что последовательный червь и thephpdeveloper сказали, что тот факт, что память / RAM намного быстрее, чем любая связанная с диском операция ввода IO, которую вы придумываете. Бросьте столько же бара, сколько вы можете в mysql, и вам не нужно будет заниматься управлением кешем, если вам действительно не нужно обновляться до кластера, и для этого нужны другие соображения. Memcache дает вам больше контроля над управлением кешем, и, следовательно, вам нужно делать больше ошибок.

Я бы начал с создания приложения, а затем проверил его и оптимизировал запросы и / или добавил управление кешем по мере необходимости.

Две вещи, на которые нужно обратить внимание, сравнительный анализ и профилирование . О единственном способе, с помощью которого вы можете сравнить значимо, – это использовать две метрики этих diciplines вместе, используя вашу текущую конфигурацию mysql, php.ini, httpd.conf, .htaccess, переписывать текст и многое другое – это бенчмаркинг и профилирование действующие технологии выполняют эту задачу.

Это бессмысленно, вы должны кэшировать результаты .

Время сборки запроса должно быть довольно незначительным. (Если это не так, вы не используете SQL, как предполагалось , генерируя вместо этого потоки глупого select s, где было бы разумным join )

При загрузке с диска запрос, очевидно, склонен замедлять работу.
(ОС может кэшировать диск IO, хотя и затрудняет его обнаружение)

В любом случае, на самом деле требуется время, чтобы получить результаты из базы данных, а затем снова вставить их в веб-страницу по шаблону. На вашем месте я бы кэшировал на диск стилизованные результаты заданного запроса, и когда его спросили, если кеш не очень старый, я бы прямо readfile() их.

Вы настроили кеш запросов MySQL?