Перейти к контенту

Кэширование


Рекомендуемые сообщения

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

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

Ну а нагрузка снизится если верно выбрать, что кэшировать.

Например, именинники на главной странице форума вытаскиваются при каждом просмотре этой самой страницы форума. А зачем делать так, ведь редко кто регистрируется в свой ДР на форуме :D Ну или можно эти данные обновлять 4 раза в день - каждые 6 часов.

Хотя на форуме у нас можно выбрать 30 часовых поясов, но для кажого по 4 запроса в день - всего 120 запросов.. всё-равно меньше, чем в данный момент.

 

Так к чему я всё это написал? Подскажите мне, уважаемые пользователи, что можно закэшировать на форуме и на какое время, чтобы всем было удобно? (А потом уже оценим рациональность предложений и что-нибудь реализуем.. или решим, что нам это не надо) ;)

 

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

Ссылка на комментарий
Поделиться на других сайтах

j0ker, на 1.3.1 кэширование надо начинать так же как это делалось в 2.0 и т.д с выделением отдельной таблицы кэшей, с которой и работает движек.

 

Например те же именинники в 2.х считаются только единожды, в 00:00, а потом просто берутся из таблицы кешей. В 1.х они считаются при каждом вызове главной страницы =)

 

Потом нагрузка на сервер складывается из нагрузки на него опача+пхп (или что там стоит в кач-ве сервера) и нагрузки на базу. Теперь смотрим на топики с 1000+ сообщений и тихо ужасаемся, а ведь они у тебя одни из самых популярных...

Ссылка на комментарий
Поделиться на других сайтах

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

 

добавлю что пример с именниками вообще ересь.

Именники - это индексируемая выборка из таблицы ibf_members + php цикл foreach. Это всё. Это берёт пару милисекунд и занимает ровно столько же, сколько взять готовый массив данных из поля блоб или текст.

Наверно в 2-хе есть нужные кеши однако пример с именниниками михо вообще не в кассу.

 

2j0k3r

я кеширую группы и настройки прав на форумы.

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

Ссылка на комментарий
Поделиться на других сайтах

Кстати, я залез в форум двуху и посмотрел что там за кеши. Действительно, есть масса полезного.

Я перевёл их на 1.х, работы не сильно много, за день справился.

Это позволило мне убрать из режима act=ST 10 запросов (это + мои дополнительные).

Из стандартных я думаю штук 7 вполне.

Ссылка на комментарий
Поделиться на других сайтах

Song

Можно еще больше убрать если использовать кешировнаие перменых, массивов и т.д. на файлах организовать. Я такое проделывал н.р. с движком не безизвесной Php-Nuke в результате у меня было всего два запроса на страничку, а миниум вообще ни одного.

Ссылка на комментарий
Поделиться на других сайтах

Не факт что работа с файлом на диске будет быстрее работы сервера БД.

 

Сокращение количества запросов для кого то становится самоцелью. "Я избавился от запросов к базе, смотрите!", х@рня! Зато ты получил кучу чтений файла, а если на сервере дохлый винт, то ты только прогадал. Память на диске считается самой дешевой, память оперативная самой дорогой. Почему? Потому что скорость разная доступа к данным. А ведь MySQL хранит кэши часто-задаваемых запросов в памяти... Ага!

 

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

Ссылка на комментарий
Поделиться на других сайтах

GiV

По поводу что быстрее из просто из файла или из базы об это уже много копий сломано н.р. на phpclub.ru Н.р что быстрее взять картинку с файловой системы или вязть ее из блоб поля в базе?

 

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

 

Я не хвастался я расказал как решал эту задачу когда делал систему хитро-кеширования.

Ссылка на комментарий
Поделиться на других сайтах

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

 

единственное кеширование модераторов очень помогло. Это вообще вещь.

У меня модераторы определялись в Boards.php, Forums.php и Topics.php

Соответственно после внедрения кеширования, у меня в Boards ушёл join на модераторов (кстати в стандарте он тоже есть и нехило раздувает выборку), в Forums и Topics ушли запросы на модераторов вообще.

А также ушёл запрос на модераторов при определении их прав (Moderate.php, mod_cp.php, warn.php).

Всё остальное не уверен, что сильно помогло.

Группы и права у меня раньше кешировались.

Ссылка на комментарий
Поделиться на других сайтах

Н.р что быстрее взять картинку с файловой системы или вязть ее из блоб поля в базе?

Зная специфику работы MySQL могу сказать что поля блоб при выборке обыкновенно сваливаются в файловую временную таблицу. Так что подобное хранение действительно не правильно.

 

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

 

Song, если ты теперь вынесишь эти кэши в shm (memcache, xcache, etc), то получишь еще добавку к скорости. Данные кэшей будут висеть в shm между запусками скриптов, а доступ к shm очень и очень впечатляет.

Ссылка на комментарий
Поделиться на других сайтах

Дык я и вынес в память массивы которые мне нужны были.

 

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

Ссылка на комментарий
Поделиться на других сайтах

GIV а можно поподробней про технологию соединения IPB c xCache? (или другой что ты имеешь опыт)
Ссылка на комментарий
Поделиться на других сайтах

Берем 2.2, находим class_cache_название

 

Подключаем данный класс, ну хотя бы в index.php. В нужном месте создаем объект класса cache_lib, и пользуемся им.

 

В частности do_put, do_get, do_remove. Собственно и все =)

Ссылка на комментарий
Поделиться на других сайтах

на сервере нужно какое-то ПО ставить?

 

Написал тебе в PM. Почитай.

Ссылка на комментарий
Поделиться на других сайтах

Master

Доступа к клиентскому разделу у меня нет :D

 

GiV

на 1.3.1 кэширование надо начинать так же как это делалось в 2.0 и т.д с выделением отдельной таблицы кэшей, с которой и работает движек.

Да? А я собирался сделать кэширование в файлах с помощью Cache_Lite

 

Например те же именинники в 2.х считаются только единожды, в 00:00

А если пользователь регистрируется в свой ДР? А разные часовые пояса?

 

Song

единственное кеширование модераторов очень помогло. Это вообще вещь.

Конечно, ведь их не так часто обновляешь ;)

Хотя я смотрел на запрос и не мог придумать, как его разбить, чтобы кэш рационально использовать.

 

Кстати, можно кэшировать и SELECT из таблицы категорий - названия ведь не меняются часто :)

Ссылка на комментарий
Поделиться на других сайтах

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

Оч. много работы, чтобы все эти запросы переделывать на дёрганье кеша, а выгоды 0.хрен десятых

Ссылка на комментарий
Поделиться на других сайтах

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.