[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Кеширование сайтов, нагрузка на сервер
inpost
Давно интересуют несколько вопросов. Подскажите:
1. База данных MySql. В течении минуты открывается 10000-раз главная страница сайта, в которой есть 5 отдельных запросов к базе данных, при этом База данных вообще не меняется. Использует ли MySql какое-то кеширование данных, чтобы снизить нагрузку или сервер? Или в данной ситуации все равно будет 50 000 обращений и сервер будет отдаввать "превышен интервал обращений к бд?"

2. ob_start... и так далее, они отправляют данные в буфер. Буфер только для того, чтоб вывести ТОЛЬКО на этой странице информацию, или информация так и будет сидеть в буфере и каждый раз при открытии выводиться?

3. Будет ли рационально убрать нагрузку на сервер таким образом: какой-нибудь скрипт раз в минуту, к примеру, будет делать обращение к базе данных, после формировать обычную html страницу и переписывать предыдущую. Так ведь можно вообще весь сайт сделать без обращений к БД... И если все же способ можно считать эфективным, не будет ли возникать проблемы с обращением к файлу, если в этот момент этот фаил будет переписываться, а пользователь попытается зайти на сайт... будут ли сбои?

4. Можно ли данные запросы объеденить в один общий? Можно ли после объединения сохранить такие же названия переменных для вывода?
$pits = mysql_query ("SELECT * FROM `pit`",$db); 
$pit = mysql_fetch_assoc($pits);
$cats = mysql_query ("SELECT * FROM `cat`",$db);
$cat = mysql_fetch_assoc($cats);
$kittens = mysql_query ("SELECT * FROM `kitten`",$db);
$kitten = mysql_fetch_assoc($kittens);

То есть хотелось бы все объеденить одним запросом и при этом иметь вывод на подобии:
echo $pit['id'].$cat['id'].$kitten['id'];


5. Заказываю хостинг обычным с готовым линуксом (я никогда до линукса не прикосался). Прописал в .htaccess правила кеш-времени, g-zip сжатие, а мне администрация сказала, что они отключили для этих пакетов такие вещи, чтобы не нагружать себе сервер. Как бы отдельно надо себе заказывать сервер... То есть это всегда так? Для этих функций необходимо платить больше? А я сейчас заплатил 30$ в год...
А если я закажу сервер, то мне дадут как бы чистый линукс, и ставить на него прийдется все самому? Тот же phpmyadmin, настройку пхп, все это вручную?

6. Ну и последнее, кто-нибудь может дать дельные ссылки на вопросы кеширования и снижения обращений к базе данных, а так же настройке сервера под себя.

Простите, что так много вопросов, просто насобиралось, не хочу отдельно создавать 6 тем, поэтому задал все в одной!
Буду рад любой помощи. Зарание спасибо



Спустя 39 минут, 15 секунд (4.09.2010 - 15:01) SlavaFr написал(а):
Пока отвечу на первые два вопроса

1) в mysql можно использовать кеш http://dev.mysql.com/doc/refman/5.1/en/buf...ng-caching.html но в связи с тем, что у тебя хостер не особо зговорчивый, то не кто тебе в настройках mysql копатся не даст. С другой стороны при 10000 запросов в минуту тебе все ровно прийдется менять условия хостинга.

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


Спустя 1 час, 2 минуты, 41 секунда (4.09.2010 - 16:03) FatCat написал(а):
Цитата (inpost @ 4.09.2010 - 15:22)
Использует ли MySql какое-то кеширование данных

Да, использует, но сами коннект/дисконнект к MySQL тоже имеют какую-то нагрузку.

Мы здесь кешируем главную страницу в файл; имя файла генерируется как:
$file = time()."file_name.ext";
Имя специально сделано так, чтобы интваль от имени давал время создания

При обращении к странице читается директория:
$open_dir=opendir($cache_dir);
while($tmp_name=readdir($open_dir))

В цикле по именам файлов через
if(stristr($tmp_name,"file_name.ext"))
находится файл кеша. Если прошло больше заданного времени кеширования, файл удаляется, запросами к БД генерируется новый ХТМЛ-код страницы и пишется в файл. Если меньше - главная страница отдается ХТМЛ-кодом из кеш-файла.

Спустя 1 час, 28 минут, 12 секунд (4.09.2010 - 17:32) inpost написал(а):
Хотелось бы услышать ответы на все вопросы. Ах да, и ещё один вопрос:
Закрыть соединение надо? Или оно само закрывается? И если несколько отдельных запросов, закрыть надо в самом конце? Я слышал, что пхп сам в конце закрывает соединение...

Спустя 54 минуты, 19 секунд (4.09.2010 - 18:26) dr.5y51em написал(а):
Цитата (FatCat @ 4.09.2010 - 13:03)
Цитата (inpost @ 4.09.2010 - 15:22)
Использует ли MySql какое-то кеширование данных

Да, использует, но сами коннект/дисконнект к MySQL тоже имеют какую-то нагрузку.

Мы здесь кешируем главную страницу в файл; имя файла генерируется как:
$file = time()."file_name.ext";
Имя специально сделано так, чтобы интваль от имени давал время создания

При обращении к странице читается директория:
$open_dir=opendir($cache_dir);
while($tmp_name=readdir($open_dir))

В цикле по именам файлов через
if(stristr($tmp_name,"file_name.ext"))
находится файл кеша. Если прошло больше заданного времени кеширования, файл удаляется, запросами к БД генерируется новый ХТМЛ-код страницы и пишется в файл. Если меньше - главная страница отдается ХТМЛ-кодом из кеш-файла.

Можно поподробней, тоже интересует. Что конкретно хранить в этом файле, в каком виде. Опишите пожалуйста как это всё в теории работает.

Спустя 1 час, 14 минут, 17 секунд (4.09.2010 - 19:40) FatCat написал(а):
Цитата (dr.5y51em @ 4.09.2010 - 19:26)
Что конкретно хранить в этом файле, в каком виде.

Хранится ХТМЛ-код.
Конкретно для этого сайта - вся главная страница. В коде оставлены 4 макроса, которые при генерации страницы заполняются динамическими данными.
Статичны все верхние ячейки с объявлениями и топом тем, вся правая колонка с новостной лентой, именинники, статистика посещаемости за 15 минут - хранятся в файле и регенерируются каждые 15 минут именно описанным мной методом.

Спустя 1 час, 19 минут, 7 секунд (4.09.2010 - 20:59) dr.5y51em написал(а):
Цитата (FatCat @ 4.09.2010 - 16:40)
Цитата (dr.5y51em @ 4.09.2010 - 19:26)
Что конкретно хранить в этом файле, в каком виде.

Хранится ХТМЛ-код.
Конкретно для этого сайта - вся главная страница. В коде оставлены 4 макроса, которые при генерации страницы заполняются динамическими данными.
Статичны все верхние ячейки с объявлениями и топом тем, вся правая колонка с новостной лентой, именинники, статистика посещаемости за 15 минут - хранятся в файле и регенерируются каждые 15 минут именно описанным мной методом.

Подскажи, пожалуйста, где можно про это подробно почитать. А то меня видимо в гугле забанили. Нормальную статью найти не могу, шлак всякий.

Спустя 2 часа, 24 минуты, 9 секунд (4.09.2010 - 23:24) FatCat написал(а):
Цитата (dr.5y51em @ 4.09.2010 - 21:59)
где можно про это подробно почитать

Я этого нигде не читал, я сам придумал.

Спустя 21 час, 55 минут, 55 секунд (5.09.2010 - 21:19) inpost написал(а):
Уважаемые форумчане. Я часто помогаю новичкам, даю дельные советы, но я знаю, что на этом сайте есть и другие, кто умнее меня и лучше в этом всём разбирается! Я задал вопросы, которые действительно меня очень волнуют, хочу зарание начать правильно кодить. Так почему же вы не хотите мне помочь? Я верю в то, что часть из посетителей знала ответы на эти вопросы.
Так почему же вы не захотели мне помочь? Может я кого-то обидел или неправильно себя тут вёл? Может эти вопросы стоило сразу разбить на несколько тем и задавать с интервалом? В чём же проблема, скажите мне...

На данный момент дали ответы на первые 3 из 7-и вопросов. (7-ой находится во второй теме)

Спустя 1 час, 51 минута, 21 секунда (5.09.2010 - 23:11) FatCat написал(а):
Цитата (inpost @ 5.09.2010 - 22:19)
дали ответы на первые 3 из 7-и вопросов.

Общепринятое на технических форумах правило: в одной теме обсуждается один вопрос. Так удобнее отвечающим, и в итоге спрашивающий получает лучшие ответы.

Спустя 11 минут, 37 секунд (5.09.2010 - 23:22) Nikitian написал(а):
inpost
Выходные, люди отдыхают, вот и ответы приходится ждать долго...
4.

$pits = mysql_query ("(SELECT * FROM `pit` limit 1) union all (SELECT * FROM `cat` limit 1) union all (SELECT * FROM `cat` limit 1)",$db);
$pit = mysql_fetch_assoc($pits);
$cat = mysql_fetch_assoc($pits);
$kitten = mysql_fetch_assoc($pits);

Это при условии, что во всех 3 таблицах одинаковое количество полей и они названы одинаково. В ином случае надо колдовать над селектами индивидуально на основе данных о структурах таблиц.

5. Некоторые хостеры предлагают тарифы для высоконагруженных проектов, где уже всё привычное вам установлено и поддержкой аппаратной и программной части сервера (не ваших скриптов) занимается хостер. Если есть админ и деньги, то арендовать выделенный сервер будет неплохой идеей с вашими 10к запросами в минуту. Стоить выделенный сервер будет от 30 евро в месяц, иногда дешевле.

6. http://highload.com.ua/

Спустя 17 минут, 3 секунды (5.09.2010 - 23:39) inpost написал(а):
А закрывать соединение с сервером надо? Где-то написано, что пхп сам закрывает его

Спустя 16 минут, 5 секунд (5.09.2010 - 23:56) Nikitian написал(а):
Надо, это правило хорошего тона: если вам больше бд не нужна, то и соединение держать ни к чему. Рекомендую закрывать соединение перед работой шаблонизатора, т.к. это несколько нагруженная операция, для которой уже не требуется бд (данные получены ранее).

Спустя 52 минуты, 30 секунд (6.09.2010 - 00:48) inpost написал(а):
Nikitian
А тогда зачем при всех трудоустройствах на должности начальника веб-программистов пишут: знание линукс, настройки сервера? Если как говоришь, поддержкой аппаратной и программной части сервера (не ваших скриптов) занимается хостер, или иметь своего админа.
Я так понимаю, администрирование серверов - это уже не наши обязаности, а отдела тех.поддержки (сис-админов)

Спустя 4 минуты, 26 секунд (6.09.2010 - 00:53) Nikitian написал(а):
Знание архитектуры и администрирование - это разные вещи. А пишут, чтобы этот начальнег не предлагал сайты клиентам на денвере вешать.

Например у меня сервер год администрировался мной, я же устанавливал и настраивал по мануалам из интернетов всё там, но потом понял, что цена простоя сервера слишком высока и уже полгода там шаманит админ. Т.е. впринципе базовые вещи сделать могу, покопавшись в интернете смогу что-то и посерьёзнее подъёма почтового сервера, но я потрачу на это день, а одмин час. За этот день я заработаю на зарплату этому админу на месяц вперёд - потому и выгоднее держать стороннего администратора, а разбираться в этом, чтобы он вам лапшу на уши не вешал. Опять же не понимая никсовой архитектуры сложно работать с симлинками и правами доступа (в виндах это всё по-другому реализовано).

Спустя 5 часов, 24 минуты, 6 секунд (6.09.2010 - 06:17) twin написал(а):
1. Да, MySQL кэширует запросы, но не все. Нужно за этим следить. Есть еще такая прикольная вещь, как memcached. Эта штука кэширует запросы в оперативной памяти и не требует постоянно дергать мускул.

Можно кэшировать в файлы результаты сложных и часто используемых запросов.

Кэш, который реализован в смарти и некоторых других шаблонизаторах, не шибко интересен, правильно заметил Nikitian
Цитата
это несколько нагруженная операция
Дело в том, что этот кэш хоть и разгружает БД, но скомпелированные шаблоны в нем работают на PHP, а это затратно.

Самым эфективным средством имхо является файловый кэш. Это примерно то, что описал FatCat. Однако если придумать или использовать по совету SlavaFr универсальный
Цитата
хорошо документированный класс для кеширования
, то можно не добиться желаемого результата. Ибо за универсальность приходится платить производительностью.

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

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

Буфер работает только в открытом скрипте и к кэшу отношения не имеет. Если не считать то, что на его основе можно сделать тот самый файловый кэш.

Запросы объединить можно, но далеко не всегда нужно. Зачастую три маленьких запроса работают гораздо быстрее, чем один большой. А вот детерменировать их на высоко нагрузочных проектах очень желательно. То есть лучше не писать звездочку, а перечислить необходимые поля.

Закрывать соединение нужно только тогда, когда после выполнения всех запросов есть еще куча выполняемого кода. Соединение закрывается автоматически, но только по окончании скрипта. И держать его открытым, пока идет обработка уже полученных данных нет смысла.

Что касается администрирования, то как то слабо вяжется это
Цитата
В течении минуты открывается 10000-раз главная страница сайта
и это
Цитата
А я сейчас заплатил 30$ в год...
Вернее вообще никак не вяжется. Если такая нагрузка, то в любом случе придется довольно плотно заниматься конфигурированием сервера. И делать это должны профессионалы. Так что готовь денажку.

И последнее
Цитата
Ну и последнее, кто-нибудь может дать дельные ссылки на вопросы кеширования и снижения обращений к базе данных, а так же настройке сервера под себя.
Конечно. Даже целых две. Яндекс и Гугл. smile.gif
Такая информация собирается по крупинкам, анализируется и затачивается под себя и текущие задачи. Так просто ты тут не отделаешься.

Спустя 1 час, 22 минуты, 7 секунд (6.09.2010 - 07:39) olgatcpip написал(а):
Цитата
3. Будет ли рационально убрать нагрузку на сервер таким образом: какой-нибудь скрипт раз в минуту, к примеру, будет делать обращение к базе данных, после формировать обычную html страницу и переписывать предыдущую. Так ведь можно вообще весь сайт сделать без обращений к БД... И если все же способ можно считать эфективным, не будет ли возникать проблемы с обращением к файлу, если в этот момент этот фаил будет переписываться, а пользователь попытается зайти на сайт... будут ли сбои?


1 - мне кажется не рационально так делать. Представь, что раз в минуту будет виснуть сайт. Будет заметно
2 - Все страницы??? ну.. если только они обновляются не чаще чем раз в сутки, чтобы на всю ночь поставить генерацию всех страниц smile.gif
3 - Проблемы с обращением..... Я точно не уверена, НО кажись так. Кто последний записал в файл та инфа и сохранится, а до записи с него считывают то что в нем было. Даже если он уже кем то открыт, то при открытии другим, тот другой прочитает все , что в файле находится в этот момент.
Короче если ты не будешь делать так: первой строчкй открыл фал, записал строчку, несколько подумал о жизни, записал другую и т.д. то может возникнуть ситуация, когда прочитана будет не все. а только часть.
Я бы писала все охапкой (т.е. ненеррирую биг строку, потом её разом в файл.), не думаю, что страница в память не влезет smile.gif)

4 - По мне так выгодней кэшировать частями. И, например, инклудить их smile.gif Ну там попутно не забывая проверять есть ли файл, не пора ли его перезаписывать......


У мня, скажу по секрету, та же самая задача сейчас стоит. И основной вопрос по крону делать али нет smile.gif)

Спустя 11 часов, 17 минут, 15 секунд (6.09.2010 - 18:56) inpost написал(а):
twin
Я хочу в дальнейшем ещё больше углубиться в ПХП, моя цель на данный момент стать отличным веб-программистом в области ПХП.
В свою очередь ты пишешь "Если такая нагрузка, то в любом случе придется довольно плотно заниматься конфигурированием сервера. И делать это должны профессионалы. Так что готовь денажку."
Стоит ли мне изучать данное направление, или конфигурацией сервера должны заниматься люди другой профессии?
На сколько писать код по ПХП и поднимать и настраивать сервер пересекаются между собой?

Спустя 46 минут, 59 секунд (6.09.2010 - 19:43) twin написал(а):
Где то тут на форуме читал классное сравнение программиста с админом. Кто толстый, кто тонкий, кто что пьёт и так далее.
Наверное можно совместить, родственные профессии. Но на практике обычно каждый занимается своим делом.
Как в автоспорте. Есть водитель и есть штурман. Если поедет один - ничего хорошего не выйдет.


_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.