Кэширование sql запросов
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов Skill-Z CMS Project -> Модификации и дополнения
 
Автор Сообщение
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);
}

}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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 Evil or Very Mad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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'у спасибо. Тестим и включаем в следующий дистр.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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 запроса остается.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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.
А так как таблица конфига остается закэшированной, то получается косяк.

Нужно принудительно чистить кэш конфига при добавлении, изменении статей.!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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

И при изменении данных, обновлять связанные таблицы.

Будет время, сам допишу если ты не сделаешь Razz
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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   Ответить с цитатой

Поставил кэш на двух сайтах. Нареканий нет,
есть выигрышь в скорости Idea
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
j4ck



Зарегистрирован: 26/05/07 09:49
Сообщения: 15

СообщениеДобавлено: 2/07/07 17:09   Ответить с цитатой

таблицу banlist необходимо тоже исключить из кэширования.
Слишком много возможных комбинаций...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Skill-Z CMS Project -> Модификации и дополнения Часовой пояс: GMT + 4
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах