Кэширование файла

Asafchik

Новичок
Кэширование файла

Алгоритм:
1) открываем файл. Проверяем когда был изменён.
2) Если время изменения больше 5 минут - делаем запрос из базы и результат записываем в файл. Вставляем файл в страницу
3) Если прошло меньше 5 минут - вставляем файл напрямую
Тоже самое относительно SQL-запросов...Пытаюсь тут осилить оптимизацию своей программки)
Какие функции использовать? Может есть примеры хорошие?
 

zerkms

TDD infected
Команда форума
Asafchik
у тебя в приложении - самое тормозное это запросы? сколько ты экономишь на таких вот па?

может стоит оптимизировать то, что тормозит, а не то, что "оптимизировать" проще. м?
 

Alexandre

PHPПенсионер
zerkms, ты просто не въехал, нужна оптимизация ради оптимизации.

-~{}~ 12.07.07 11:31:

Тоже самое относительно SQL-запросов...
Asafchik
интересно узнать, как ты будешь узнавать время изменения SQL-запроса, и откуда цифра 5 мин?
 

Asafchik

Новичок
Узнавать нужно не время запроса.
При запросе создаётся файл, в который пихается его результат. Если файл изменён менее 300секунд назад (5 минут), то вставляем файл, если нет - делаем новый запрос и перезаписываем.
 

phprus

Moderator
Команда форума
Asafchik
Объясни пожалуйста, какой смысл в твоих действиях? У тебя самое тормозное место в скриптах - это база данных? Если да (Вероятность чего далеко не 100%), то может вначале следует оптимизировать запросы с использованием explain для определения того, что в запросе тормозит?

Узнавать нужно не время запроса.
"Время запроса" и "Время изменения результата запроса" - это разные вещи.
 

Asafchik

Новичок
Мне это нужно для минимизации запросов к базе.
Так как у меня игровой сервер и в статистику выводятся данные об игроках и т.п.
Если много посетителей - сайт офигевает из-за количества запросов.
А запросы простейшие на самом деле.
Их оптимизировать некуда.
 

zerkms

TDD infected
Команда форума
Asafchik
ты уверен что именно запросы тормозят, и что сайт офигевает именно изза них?
 

planarik

Новичок
Простейший и оптимальный запросы - это разные вещи.

К примеру, есть две таблицы , скажем items и groups_items. В items есть поле group_id - ссылка на вторую таблицу. Что бы вывести список, можно сделать так

1. Простейший запрос перед циклом "SELECT * FROM items"
2. Простейший запрос в цикле "SELECT * FROM groups_items WHERE ID=$item["group_ID"]"

А можно сделать так
2. Сложнее но оптимальнее "SELECT groups_items.name as groups items.* FROM items INNER JOIN groups_items ON (items.groups_id = groups_items.ID). И все выводим в цикле.

Вывод второй запрос сложнее но ОПТИМАЛЬНЕЕ, поскольку он один.

Пересмотри свой код, может можно что-то таким образом переделать, чем с бубном прыгать?
 

Asafchik

Новичок
Код:
Select acc_name as accs from MEMB_STAT where ConnectStat = '1'
Куда оптимальнее то?Сервер СуБД - MSSQL.
Была бы MySQL - не было бы проблем.
Запросы там по одному на каждый вид данных.
Их 4.
Онлайн
Сколько чаров
Сколько акков
Сколько кланов
 

Asafchik

Новичок
Зачем pconnect??Сервер офигеет от постоянных подключений.
Да и извините есть ли персист коннект в MSSQL???
 

phprus

Moderator
Команда форума
Asafchik
Select acc_name as accs from MEMB_STAT where ConnectStat = '1'
А поле ConnectStat у нас имеет индекс?
Какие размеры у этих таблиц?

P.S. Чтото я сомневаюсь, что MSSQL будет дико тормозить на запросе по проиндексированному полю.
 

AP

Новичок
planarik, количество одновременных соединений ограниченно, да и закрывать лучше сразу, а не по таймауту...
 

Asafchik

Новичок
Автор оригинала: phprus
Asafchik

А поле ConnectStat у нас имеет индекс?
Какие размеры у этих таблиц?

P.S. Чтото я сомневаюсь, что MSSQL будет дико тормозить на запросе по проиндексированному полю.
Индекса нет.
А кто нибудь может посоветовать как сделать то решение, какое я написал или самому изобретать?
 

iceman

говнокодер
все что выводится в браузер - запихнуть в фаил... вот это кэширование...
 

Vitafresh

Новичок
Автор оригинала: Asafchik
Индекса нет.
А кто нибудь может посоветовать как сделать то решение, какое я написал или самому изобретать?
Asafchik, в PHP я пока не силен, только начал осваивать.

Но насчет СУБД открою тебе страшный секрет. Если запрос вызывается не разово, и какое-то поле (или группа полей) участвует в конструкции WHERE оно(они) в обязательном порядке должно(ы) быть проиндексировано(ы). В противном случае товой запрос будет фетчить всю таблицу и если не найдет нужных данных в кэше (в случае больших таблиц) начнет читать с диска -- вот тут то и начинаются тормоза.

Так что проиндексируй используемые в запросе поля и ты приятно удивишься.
 

OZ

Новичок
Re: Кэширование файла

Автор оригинала: Asafchik
Какие функции использовать? Может есть примеры хорошие?
filemtime().
Я считаю, что мысль твоя верна, и не слушай теоретиков, не понимающих сути вопроса.
 
Сверху