j0k3r Опубликовано 25 Ноября 2006 Жалоба Поделиться Опубликовано 25 Ноября 2006 Недавно программист один на работе посоветовал использовать кэширование у нас на форуме для снижения нагрузки на сервер. Почитал я тут статейки разные...Думается мне, что кэшировать можно вывод информации из базы данных (на данный момент к базе идёт ~64 обращения в секунду). Суть в том, чтобы не вытаскивать значения из базы данных каждый раз, когда посетитель заходит на какую-нибудь страницу форума, а вытаскивать эти данные раз в Х минут, сохранять и показывать посетителям эти данные, а обновлять только через Х минут.Ну а нагрузка снизится если верно выбрать, что кэшировать.Например, именинники на главной странице форума вытаскиваются при каждом просмотре этой самой страницы форума. А зачем делать так, ведь редко кто регистрируется в свой ДР на форуме Ну или можно эти данные обновлять 4 раза в день - каждые 6 часов.Хотя на форуме у нас можно выбрать 30 часовых поясов, но для кажого по 4 запроса в день - всего 120 запросов.. всё-равно меньше, чем в данный момент. Так к чему я всё это написал? Подскажите мне, уважаемые пользователи, что можно закэшировать на форуме и на какое время, чтобы всем было удобно? (А потом уже оценим рациональность предложений и что-нибудь реализуем.. или решим, что нам это не надо) Сразу для понимающих в данной теме напишу, что кэшировать страницы топиков (старых или новых - без разницы) пока не предполагается, только данные из базы этих самых данных (счётчики "всего сообщений, топиков, пользователей на форуме", счётчики количества просмотров топиков в каждом разделе, количества ответов в каждый топик и т.д.) Ссылка на комментарий Поделиться на других сайтах Прочее
Master Опубликовано 25 Ноября 2006 Жалоба Поделиться Опубликовано 25 Ноября 2006 Есть расширенная тема в клиентском разделе на том форуме про кеширование. Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 25 Ноября 2006 Жалоба Поделиться Опубликовано 25 Ноября 2006 j0ker, на 1.3.1 кэширование надо начинать так же как это делалось в 2.0 и т.д с выделением отдельной таблицы кэшей, с которой и работает движек. Например те же именинники в 2.х считаются только единожды, в 00:00, а потом просто берутся из таблицы кешей. В 1.х они считаются при каждом вызове главной страницы =) Потом нагрузка на сервер складывается из нагрузки на него опача+пхп (или что там стоит в кач-ве сервера) и нагрузки на базу. Теперь смотрим на топики с 1000+ сообщений и тихо ужасаемся, а ведь они у тебя одни из самых популярных... Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 25 Ноября 2006 Жалоба Поделиться Опубликовано 25 Ноября 2006 тем не менее как бы там в двухе было всё не прокеширована, однуха работает быстрей это факт. добавлю что пример с именниками вообще ересь.Именники - это индексируемая выборка из таблицы ibf_members + php цикл foreach. Это всё. Это берёт пару милисекунд и занимает ровно столько же, сколько взять готовый массив данных из поля блоб или текст.Наверно в 2-хе есть нужные кеши однако пример с именниниками михо вообще не в кассу. 2j0k3rя кеширую группы и настройки прав на форумы.Это позволило мне многие запросы облегчить, некоторые вообще убрать. Но переделок просто до х. Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 1 Декабря 2006 Жалоба Поделиться Опубликовано 1 Декабря 2006 Кстати, я залез в форум двуху и посмотрел что там за кеши. Действительно, есть масса полезного.Я перевёл их на 1.х, работы не сильно много, за день справился.Это позволило мне убрать из режима act=ST 10 запросов (это + мои дополнительные).Из стандартных я думаю штук 7 вполне. Ссылка на комментарий Поделиться на других сайтах Прочее
xRay Опубликовано 1 Декабря 2006 Жалоба Поделиться Опубликовано 1 Декабря 2006 SongМожно еще больше убрать если использовать кешировнаие перменых, массивов и т.д. на файлах организовать. Я такое проделывал н.р. с движком не безизвесной Php-Nuke в результате у меня было всего два запроса на страничку, а миниум вообще ни одного. Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 1 Декабря 2006 Жалоба Поделиться Опубликовано 1 Декабря 2006 Не факт что работа с файлом на диске будет быстрее работы сервера БД. Сокращение количества запросов для кого то становится самоцелью. "Я избавился от запросов к базе, смотрите!", х@рня! Зато ты получил кучу чтений файла, а если на сервере дохлый винт, то ты только прогадал. Память на диске считается самой дешевой, память оперативная самой дорогой. Почему? Потому что скорость разная доступа к данным. А ведь MySQL хранит кэши часто-задаваемых запросов в памяти... Ага! Более того кэширование это прежде всего процесс позволяющий повторно использовать данные в процессе работы чего либо. Так что если я в функции постоянно что-то считаю, при этом это чтото либо как то зависит от предыдущего значения, либо не меняется вообще, то я могу результат этих подсчетов хранить в static переменной, что позволит мне уменьшить кол-во подсчетов и это будет называться кэшированием. Ссылка на комментарий Поделиться на других сайтах Прочее
xRay Опубликовано 2 Декабря 2006 Жалоба Поделиться Опубликовано 2 Декабря 2006 GiVПо поводу что быстрее из просто из файла или из базы об это уже много копий сломано н.р. на phpclub.ru Н.р что быстрее взять картинку с файловой системы или вязть ее из блоб поля в базе? Не забывай что static у тебя будет только в пределах одной сесии. А я приследовал цель кешировать значения некоторых перменых которые нужны во всех сесиях пользовательских. Я не хвастался я расказал как решал эту задачу когда делал систему хитро-кеширования. Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 2 Декабря 2006 Жалоба Поделиться Опубликовано 2 Декабря 2006 ну вообщем-то по правде говоря, почти все запросы что я убрал, это были запросы которые исполняются примерно 0.006.. так что не сильно хорошая уж прям оптимизация, больше для совести спокойней =) единственное кеширование модераторов очень помогло. Это вообще вещь.У меня модераторы определялись в Boards.php, Forums.php и Topics.phpСоответственно после внедрения кеширования, у меня в Boards ушёл join на модераторов (кстати в стандарте он тоже есть и нехило раздувает выборку), в Forums и Topics ушли запросы на модераторов вообще. А также ушёл запрос на модераторов при определении их прав (Moderate.php, mod_cp.php, warn.php). Всё остальное не уверен, что сильно помогло.Группы и права у меня раньше кешировались. Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 2 Декабря 2006 Жалоба Поделиться Опубликовано 2 Декабря 2006 Н.р что быстрее взять картинку с файловой системы или вязть ее из блоб поля в базе?Зная специфику работы MySQL могу сказать что поля блоб при выборке обыкновенно сваливаются в файловую временную таблицу. Так что подобное хранение действительно не правильно. Но мы то говорим о результатах вычислений/запросов, которые используются во многих местах в процессе работы скрипта. А это в худшем случае сериализованный объект (массив). Song, если ты теперь вынесишь эти кэши в shm (memcache, xcache, etc), то получишь еще добавку к скорости. Данные кэшей будут висеть в shm между запусками скриптов, а доступ к shm очень и очень впечатляет. Ссылка на комментарий Поделиться на других сайтах Прочее
xRay Опубликовано 2 Декабря 2006 Жалоба Поделиться Опубликовано 2 Декабря 2006 Дык я и вынес в память массивы которые мне нужны были. Насчет что быстрее не все так просто н.р. серваки под СБУД как правило закупаются гораздо мощнее чем серваки под просто веб-сервера. Так что в конкретных вариантах возможно что из базы быстре чем с файловой системы и наоборот. (в своем посте я подрузумеваю что используется отдельно сервак с базой и веб-сервак) Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 5 Декабря 2006 Жалоба Поделиться Опубликовано 5 Декабря 2006 GIV а можно поподробней про технологию соединения IPB c xCache? (или другой что ты имеешь опыт) Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 5 Декабря 2006 Жалоба Поделиться Опубликовано 5 Декабря 2006 Берем 2.2, находим class_cache_название Подключаем данный класс, ну хотя бы в index.php. В нужном месте создаем объект класса cache_lib, и пользуемся им. В частности do_put, do_get, do_remove. Собственно и все =) Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 5 Декабря 2006 Жалоба Поделиться Опубликовано 5 Декабря 2006 на сервере нужно какое-то ПО ставить? Написал тебе в PM. Почитай. Ссылка на комментарий Поделиться на других сайтах Прочее
j0k3r Опубликовано 9 Декабря 2006 Автор Жалоба Поделиться Опубликовано 9 Декабря 2006 MasterДоступа к клиентскому разделу у меня нет GiVна 1.3.1 кэширование надо начинать так же как это делалось в 2.0 и т.д с выделением отдельной таблицы кэшей, с которой и работает движек.Да? А я собирался сделать кэширование в файлах с помощью Cache_Lite Например те же именинники в 2.х считаются только единожды, в 00:00А если пользователь регистрируется в свой ДР? А разные часовые пояса? Songединственное кеширование модераторов очень помогло. Это вообще вещь.Конечно, ведь их не так часто обновляешь Хотя я смотрел на запрос и не мог придумать, как его разбить, чтобы кэш рационально использовать. Кстати, можно кэшировать и SELECT из таблицы категорий - названия ведь не меняются часто Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 9 Декабря 2006 Жалоба Поделиться Опубликовано 9 Декабря 2006 Категории кешировать смысла нет особого, т.к. табличка оч. маленькая. И она используется в джойнах оч. часто.Оч. много работы, чтобы все эти запросы переделывать на дёрганье кеша, а выгоды 0.хрен десятых Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения