выгода от CDbCacheDependency

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

выгода от CDbCacheDependency

Сообщение kukuruku »

в примерах с кешированием часто используют CDbCacheDependency для установки зависимости
но это означает выполнение запроса к базе для проверки зависимости
получается если ломанется на сайт тысяча человек, то все равно будет тысяча запросов к базе, причем при каждом обращении к странице будет запрос через CDbCacheDependency
насколько эффективно использование CDbCacheDependency?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: выгода от CDbCacheDependency

Сообщение anton44eg »

если в CDbCacheDependency делать запрос намного проще (проще для СУБД), чем запрос реальных данных - то почему бы и нет?
R3D3
Сообщения: 352
Зарегистрирован: 2010.04.11, 14:52

Re: выгода от CDbCacheDependency

Сообщение R3D3 »

Результаты запросов mysql тоже кеширует. Какой-нибудь запрос для проверки актуальности кеша вроде

Код: Выделить всё

SELECT MAX(id) FROM messages
в случае, если на id проставлен индекс, будет в 100 раз легче чем тяжелый запрос для выборки 50 последних сообщений вместе с пользователями. В этом случае нагрузка снижается в 100 раз, что очень классно.
Yii Jabber Conference: yii@conference.jabber.ru
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: выгода от CDbCacheDependency

Сообщение kukuruku »

R3D3 писал(а):Результаты запросов mysql тоже кеширует. Какой-нибудь запрос для проверки актуальности кеша вроде

Код: Выделить всё

SELECT MAX(id) FROM messages
в случае, если на id проставлен индекс, будет в 100 раз легче чем тяжелый запрос для выборки 50 последних сообщений вместе с пользователями. В этом случае нагрузка снижается в 100 раз, что очень классно.
если будет кешироваться запрос

Код: Выделить всё

SELECT MAX(id) FROM messages
то какой тогда от запроса толк? всегда будет возвращаться одинаковое значение
R3D3
Сообщения: 352
Зарегистрирован: 2010.04.11, 14:52

Re: выгода от CDbCacheDependency

Сообщение R3D3 »

kukuruku писал(а):
R3D3 писал(а):Результаты запросов mysql тоже кеширует. Какой-нибудь запрос для проверки актуальности кеша вроде

Код: Выделить всё

SELECT MAX(id) FROM messages
в случае, если на id проставлен индекс, будет в 100 раз легче чем тяжелый запрос для выборки 50 последних сообщений вместе с пользователями. В этом случае нагрузка снижается в 100 раз, что очень классно.
если будет кешироваться запрос

Код: Выделить всё

SELECT MAX(id) FROM messages
то какой тогда от запроса толк? всегда будет возвращаться одинаковое значение
mysql сам по умному кеширует, как только в таблицу messages будет вставлена новая строка или удалена существующая, кеш сбросится. Для разработчика это незаметно.
Yii Jabber Conference: yii@conference.jabber.ru
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: выгода от CDbCacheDependency

Сообщение kukuruku »

но ведь с таким же успехом mysql может закешировать и более крупную выборку, которую разработчик кеширует средствами yii
R3D3
Сообщения: 352
Зарегистрирован: 2010.04.11, 14:52

Re: выгода от CDbCacheDependency

Сообщение R3D3 »

Если проект под высокой нагрузкой, то mysql кеш большой выборки может очень часто сбрасываться и нагрузка на БД будет все равно на несколько порядков больше чем при легковесном запросе SELECT MAX(id).

А вообще, лучшей демонстрацией будет собственный опыт. Сделай таблицы messages и users, забей в них несколько сотен тысяч записей, и протестируй нагрузоустойчивость при наличии CDbCacheDependency и без него.
Yii Jabber Conference: yii@conference.jabber.ru
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: выгода от CDbCacheDependency

Сообщение kukuruku »

если использовать такой запрос для зависимости

Код: Выделить всё

select max(last_update) from table
то last_update нужно делать индексом?
R3D3
Сообщения: 352
Зарегистрирован: 2010.04.11, 14:52

Re: выгода от CDbCacheDependency

Сообщение R3D3 »

kukuruku писал(а):если использовать такой запрос для зависимости

Код: Выделить всё

select max(last_update) from table
то last_update нужно делать индексом?
Да, нужно делать индексом.
Yii Jabber Conference: yii@conference.jabber.ru
Ответить