|
Автор |
Сообщение |
j4ck
Зарегистрирован: 26/05/07 09:49 Сообщения: 15
|
Добавлено: 13/06/07 14:29 |
|
|
Доработал класс mysql4.php, теперь он поддерживает кэширование запросов.
файл: положить в /db/ (изменить на .php)
http://www.skillz.ru/downloads/patches/sql_cache/mysql4.txt
Для работы создать папку /cache/sql/
Эффективность: (главная страница версии 1.15)
По-умолчанию в скиллз обновляет счетчик просмотров статей/новостей, что мешает кэшированию (кэш статей очищается при просмотре новости).
Поэтому, повысить эффективность кэша позволит комментирование блока кода в modules/mod_blog/blog.php (если вам не нужны счетчики просмотра статей)
Код: | $sql = 'UPDATE ' . BLOG_TABLE . ' SET viewed_times = ' . $row['viewed_times'] . ' WHERE id = ' . $row['id'] . ' LIMIT 1;';
$core->db->sql_query($sql);
|
Примечание: альфа версия. просьба протестировать на производительность. |
|
Вернуться к началу |
|
|
surg30n Skill+Z Developer
Зарегистрирован: 1/11/05 00:19 Сообщения: 198
|
Добавлено: 13/06/07 14:53 |
|
|
Неплохо. подшлифовать, добавить возможность выключения из админки - будет вообще неплохой мод.
Нашел баг - file_put_contents не будет работать на php 4.
Нужно написать в начале файла что то вроде
Код: | if (!function_exists('file_put_contents')) {
function file_put_contents($fname, $data) {
$fl=fopen($fname,'w');
fwrite($fl,$data);
fclose($fl);
}
} |
|
|
Вернуться к началу |
|
|
j4ck
Зарегистрирован: 26/05/07 09:49 Сообщения: 15
|
Добавлено: 13/06/07 16:22 |
|
|
Ага, я на пятерке тестил.
Думаю можно доработать и включить в дистрибутив следующей версии.
Вообщем работает, очень полезна там где выводится много контента и происходит минимум манипуляций с ним.
Позволяет снизить нагрузку на субд на 80-90%, если сервер бд медленный, то этот скрипт очень кстати. |
|
Вернуться к началу |
|
|
mihail
Зарегистрирован: 1/11/05 22:56 Сообщения: 30
|
Добавлено: 13/06/07 21:05 |
|
|
Тема супер. сам хотел реализовать нечно подобное. На dklab есть класс simpledb, но там немного другой принцип кэширования..
Ставлю себе!
Хочу добавить что неплохо было бы создать в папке файлик .htaccess
с deny from all на всякий случай!
Афтору зачет! |
|
Вернуться к началу |
|
|
j4ck
Зарегистрирован: 26/05/07 09:49 Сообщения: 15
|
Добавлено: 14/06/07 09:21 |
|
|
Потестил на локалке, все бегает отлично.
Только результаты тестирования на производительность не очень впечатлили... Нагрузка с mysql равномерно распределяется на php |
|
Вернуться к началу |
|
|
surg30n Skill+Z Developer
Зарегистрирован: 1/11/05 00:19 Сообщения: 198
|
Добавлено: 14/06/07 09:46 |
|
|
Не соглашусь про производительность:
Код: | Генерация: 0.2389c (PHP: 97%, SQL: 3%), запросов SQL: 4, GZIP enabled (6), Debug off |
Поставил для тестирования тут:
http://www.skillz.ru/xc/
По-моему результаты неплохие.
J4ck'у спасибо. Тестим и включаем в следующий дистр. |
|
Вернуться к началу |
|
|
surg30n Skill+Z Developer
Зарегистрирован: 1/11/05 00:19 Сообщения: 198
|
Добавлено: 14/06/07 10:11 |
|
|
Кстати по оптимизации запросов - если у вас установлены правильные настройки (collation и charset) в субд и нет необходимости каждый раз настраивать их клиентом, то можно выиграть еще 2 запроса и убрать лишний код.
В файле db.php
Код: | // Set connection charset & collation for MySQL (based on phpMyAdmin)
if( 0 ) //preg_match("/^mysql/i", SQL_LAYER) ) |
Ставим 0 в условие или вообще убираем весь блок кода, что выполеняется в случае истинности и получаем (в связке с кэшем, выключен счетчик статей)
Код: | Генерация: 0.2061c (PHP: 91%, SQL: 9%), запросов SQL: 2, GZIP enabled (6), Debug off
|
Таблицы users и sessions включены в список исключений для кэширования, поэтому как минимум 2 запроса остается. |
|
Вернуться к началу |
|
|
rinas
Зарегистрирован: 2/04/07 15:43 Сообщения: 16
|
Добавлено: 14/06/07 17:26 |
|
|
j4ck писал(а): | Доработал класс mysql4.php, теперь он поддерживает кэширование запросов.
|
Спасибо, работает |
|
Вернуться к началу |
|
|
surg30n Skill+Z Developer
Зарегистрирован: 1/11/05 00:19 Сообщения: 198
|
Добавлено: 14/06/07 20:38 |
|
|
j4ck,
статьи не добавляются!
Вернее добавляются, но их количество кэшилось в config.
А так как таблица конфига остается закэшированной, то получается косяк.
Нужно принудительно чистить кэш конфига при добавлении, изменении статей.! |
|
Вернуться к началу |
|
|
j4ck
Зарегистрирован: 26/05/07 09:49 Сообщения: 15
|
Добавлено: 14/06/07 22:58 |
|
|
>> Спасибо, работает
Пока не совсем, нужно доработать.
2surg30n
Как вариант можно добавить config в список исключений кэша.
Или менять код в модуле блога (чтобы очищалась таблица кэша после изменения данных). |
|
Вернуться к началу |
|
|
surg30n Skill+Z Developer
Зарегистрирован: 1/11/05 00:19 Сообщения: 198
|
Добавлено: 15/06/07 09:49 |
|
|
j4ck
Можно придумать более универсальный подход - создать список (массив) связанных таблиц:
blog -> config
categories -> config
И при изменении данных, обновлять связанные таблицы.
Будет время, сам допишу если ты не сделаешь |
|
Вернуться к началу |
|
|
j4ck
Зарегистрирован: 26/05/07 09:49 Сообщения: 15
|
Добавлено: 15/06/07 10:58 |
|
|
Перезалил файл mysql4.php
+ пофиксил баг с кэшем, если использовались join'ы в sql
+ по совету surg30n'а реализованы "связанные таблицы", теперь при изменении данных в blog, очищается кэш конфига ($cache_table_chains)
+ добавлена возможность отключения кэша ($cache_enabled, $config['disable_sql_cache']) |
|
Вернуться к началу |
|
|
j4ck
Зарегистрирован: 26/05/07 09:49 Сообщения: 15
|
Добавлено: 17/06/07 00:57 |
|
|
+ Поправил еще ошибку (кэширование последних тем с форума)
По умолчанию оставлены для кэширования таблицы, префикс которых совпадает с установленным в системе. Кэш форума автоматически отклчается для избежания "залипания" последних ответов. |
|
Вернуться к началу |
|
|
mihail
Зарегистрирован: 1/11/05 22:56 Сообщения: 30
|
Добавлено: 22/06/07 13:55 |
|
|
Поставил кэш на двух сайтах. Нареканий нет,
есть выигрышь в скорости |
|
Вернуться к началу |
|
|
j4ck
Зарегистрирован: 26/05/07 09:49 Сообщения: 15
|
Добавлено: 2/07/07 17:09 |
|
|
таблицу banlist необходимо тоже исключить из кэширования.
Слишком много возможных комбинаций... |
|
Вернуться к началу |
|
|
|