Страница 1 из 1

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

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

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

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

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

Добавлено: 2018.12.03, 15:52
andku83

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

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

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

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

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

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