Yii, EAV, производительность?

Доброй ночи.
Столкнулся с таким вопросом. Есть довольно тяжелая обработка сущностей на сайте на базе Yii.
Кратко опишу суть: есть товары, которые имеют настраиваемые модификации (как, например, телефоны 8Гб и 16Гб, только реально параметры могут быть разные + на один товар может быть несколько взаимосвязанных параметров и количество значений может отличаться).
Сейчас на товарах один вариативный параметр (в среднем у каждого товара есть 5-7 вариаций). Все это реализовано через EAV.
Проблема в том, что производительность не совсем устраивает. 1 страница категории = 17 товарам, что занимает 3,5-3,7 секунд на сервере. Профилировка кода и запросов показывает, что около 2-х секунд уходит на вызов типа (повторяется он 141 раз на одной странице):
$attribute = Attribute::model()->with('options')->findByAttributes(array('name'=>$attr));

Логика подсказывает использовать кэширование, пусть даже кратковременное, но добавление ->cache(120) ничего не дает. Боюсь чем дальше это пойдет (я имею ввиду несколько вариативных параметров на товар), тем будет хуже.
С какой стороны стоит зайти для решения этого вопроса?
  • Вопрос задан
  • 5160 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
вы используете вот эту штуку? Просто выкиньте и перепишите с inner/left join-нами для выборок.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Masterme
запросы в цикле делаете что ли?
Ответ написан
AMar4enko
@AMar4enko
При работе с БД не должно быть ничего неявного - вы должны от и до понимать, как работает тот или вызов ActiveRecord.
Я разрабатывал магазин на Yii, товары с вариативными параметрами, параметры в отдельной таблице, связь "много ко многим" - все нормально бегало.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы