Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Кеширование результата mysql запроса
 
 автор: NIK   (11.12.2010 в 15:56)   письмо автору
 
 

Есть часть кода, которая выводит контент на основе результата mysql запроса из одной таблицы.
Обновляться он будет не часто, поэтому хочется сохранять его в файл, и при последующем выводе, если нет изменений в результате запроса, выводить из файла, если есть - генерить файл заново.
Я пока придумал только генерить файл после каждого изменения данных в таблице, но как-то это мне не нравится, не красиво. Нашёл ещё что-то про кеширование средствами mysql, но т.к. никогда не сталкивался, прошу помощи.
Подскажите что и как кешировать, хотя бы алгоритм

  Ответить  
 
 автор: kosta_in_net   (12.12.2010 в 07:38)   письмо автору
 
   для: NIK   (11.12.2010 в 15:56)
 

Лично я считаю генерить файл после каждого изменения данных в таблице самым верным способом. При запросе данных посетителем, сервер, не задымываясь, отдает ему файл - нарпяга практически ноль. Зачем же придувымать какой-то хомут для сервера?

  Ответить  
 
 автор: nikita2206   (12.12.2010 в 11:52)   письмо автору
 
   для: kosta_in_net   (12.12.2010 в 07:38)
 

Зачем тогда тебе вообще mysql. Ложи сразу все в файл.

  Ответить  
 
 автор: Trianon   (12.12.2010 в 12:48)   письмо автору
 
   для: nikita2206   (12.12.2010 в 11:52)
 

Он и кладет.
Только не всё, а наиболее часто запрашиваемые, из наиболее редко меняемых документов.
Вполне разумная практика - кеширование задействуется на всех уровнях стандартными механизмами протокола.

  Ответить  
 
 автор: NIK   (12.12.2010 в 14:47)   письмо автору
 
   для: Trianon   (12.12.2010 в 12:48)
 

>Вполне разумная практика - кеширование задействуется на всех уровнях стандартными механизмами протокола.
и как же мне задействовать кеширование на уровне мускулины? Чтобы в идеале мускул сам хранил нечто хеша таблицы и при запросе проверял сходится ли этот хеш с текущим, если расходится - выдаёт результат выборки, сходится - отдаёт кешированный результат.

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

вспомнил ещё про Update_time таблицы через SHOW TABLE STATUS LIKE 'table' - его можно сверять с датой изменения файла, но как сказад Trianon "это не DML-оператор" и доступен он не во всех типах таблиц.

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

  Ответить  
 
 автор: Trianon   (12.12.2010 в 14:56)   письмо автору
 
   для: NIK   (12.12.2010 в 14:47)
 

>поэтому буду просто подключать файл,

В каком смысле - подключать? Зачем подключать? Чтобы контент опять перестал быть статическим?
Или Вы имеете в виду подключение на клиентской стороне?

>который будет создаваться каждый раз заново после изменений данных в таблице.

Вот его бы и оставляли для http.

  Ответить  
 
 автор: kosta_in_net   (12.12.2010 в 18:41)   письмо автору
 
   для: Trianon   (12.12.2010 в 14:56)
 

Трианон имеет в виду, что можно сгенерировать ВСЮ страницу, от <!DOCTYPE до </html> и отдавать ее посетителю (верно?). Это применяется, например, в shop-script. Если же такой подход по каким-то причинам неудобен, можно генерировать только часть, связанную с выборкой из базы, и инклюдить ее в остальной HTML. Мне это представляется подобным тому, что происходит здесь: http://808.su/. Меню довольно сложное (если пооткрывать все плюсики). И на всех страницах одно и то же. Зачем каждый раз делать запрос к базе и структурировать полученные записи? Вместо этого меню экономически целесообразней формировать при администрировании. Но и формировать весь сайт в виде статического HTML незачем. Зачем была бы нужна база, если все равно используются обычные файлы? Взять 10 строк (для страницы каталога) из базы не велика задача.
Вобщем, Трианон (как я понял), предлагает кешировать полностью сформированные страницы, но я считаю, что такая нужда возникает редко. И когда нужды нет, можно кешировать только часть страницы, а потом собирать с остальными ее фрагментами перед выдачей.

  Ответить  
 
 автор: NIK   (12.12.2010 в 20:02)   письмо автору
 
   для: kosta_in_net   (12.12.2010 в 18:41)
 

да, у меня точно такая же задача с многоуровневым меню, т.е.
> можно генерировать только часть, связанную с выборкой из базы, и инклюдить ее в остальной HTML
вопрос в том как это сделать оптимальнее, вернее даже какие ещё есть варианты, кроме как
> формировать (меню) при администрировании

  Ответить  
 
 автор: Красная_шляпа   (12.12.2010 в 21:51)   письмо автору
 
   для: NIK   (12.12.2010 в 20:02)
 

через инлайн фрейм загружай меню что тут думать

  Ответить  
 
 автор: kosta_in_net   (13.12.2010 в 17:16)   письмо автору
 
   для: NIK   (12.12.2010 в 20:02)
 

Есть варианты:
1) кешировать все страницы целиком. Но тогда возникает геморой с количеством закешированной информации и с анализом, откуда брать инфу, из кеша или из базы (похоже, это то, чем ты пытаешся озадачиться)
2) кешировать только результат сложного запроса, формируя его при администрировании. Для меню, в этом случае, можно применить:
2.1) инклюд, и клеить результат к страницам при выдаче
2.2) фрейм (но эта тема нынче не в чести, хотя позволяет экономить трафик)
2.3) ajax, и клеить меню аяксом. Но тогда по ссылкам не смогут ходить поисковики.
Я бы выбрал вариант 2.1

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования