Как лучшие быть с дублирующимися запросами к базе

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
NeverDie
Сообщения: 69
Зарегистрирован: 2012.05.13, 04:05
Откуда: Минск
Контактная информация:

Как лучшие быть с дублирующимися запросами к базе

Сообщение NeverDie »

Здравствуйте!
Часто по коду бывает, что нужно вызывать одотипную команду, которая дублирует запрос к базе данных. Например, когда настройки сайта хранятся в базе и требуется емейл. И весь вызов сводится примерно к такой вариации:

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

$model = Settings::find()->where(['setting_name'=>'email'])->one();
echo $model->value;
И получается, что подобный код может создавать дублирующие запросы к базе вида SELECT .... WHERE 'setting_name' = 'name';
Есть ли какие-то рекомендации, как поступать в таких случаях? Кеширование? Отдельный класс для хранения данных? Просто забить? :)


Аватара пользователя
SiZE
Сообщения: 2699
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Как лучшие быть с дублирующимися запросами к базе

Сообщение SiZE »

Запрос запросу рознь. Для настроек, как правило делают компонент, который банально кеширует в приватную переменную. И при обращении к ключу сперва проверяет переменную, а потом уже лезет в базу.
в поиске работы

donitoza
Сообщения: 31
Зарегистрирован: 2012.05.30, 17:59

Re: Как лучшие быть с дублирующимися запросами к базе

Сообщение donitoza »

SiZE писал(а):
2018.12.03, 23:38
Запрос запросу рознь. Для настроек, как правило делают компонент, который банально кеширует в приватную переменную. И при обращении к ключу сперва проверяет переменную, а потом уже лезет в базу.
1. В Yii есть кэширование запросов, из коробки, настройте для малоизменяемых данных и ... всё.
2. Если параметры запроса постоянно меняются и таких запросов к одной и той же таблице много, а данные всё еще малоизменяемы - тогда, если возможно, кэшируйте всю таблицу во внешний кэш (например redis) и берите данные из него (НО не забудьте про инвалидацию кэша).
3. Если данные в БД подвержены постоянному изменению - то никакой кэш Вам особо не поможет, да это и не страшно - практически любая СУБД специально и создавалась для подобной работы, кстати, читающие транзакции - это идеальный вид нагрузки для БД (которая сама всё и закэширует). Единственное, что могу посоветовать в данном случае - необходимо стараться уменьшить затраты на подключение к БД, например, подключением к БД через файл-сокет (linux).

Аватара пользователя
SiZE
Сообщения: 2699
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Как лучшие быть с дублирующимися запросами к базе

Сообщение SiZE »

donitoza писал(а):
2018.12.06, 17:20
1. В Yii есть кэширование запросов, из коробки, настройте для малоизменяемых данных и ... всё.
нет смысла кешировать настройки через кеширование из коробки и ...всё
в поиске работы

Ответить