Всем привет!
Имеется магазин на Drupal Commerce. Проблема в том, что у товаров очень много разных особенностей + всякие разные примочки для пометки товаров в акции и так далее. Таким образом, в сумме node product + commerce product у меня имеют 40 дополнительных полей.
Благодаря этому, у нас в БД появилось множество таблиц для каждого поля. И когда я красиво вывожу это всё используя Search API Views, то через Devel вижу примерно 2 тысячи обращений к БД только из функции field_sql_storage_field_storage_load - это она тянет из каждого поля данные, пока они не упадут в кэш. Вот смотрю страничку с товарами в 40 штук - 3.5 тысячи запросов к БД. После обновления страницы - 372 и быстрое отображение.
Кто как справляется в подобных ситуациях? Поделитесь, пожалуйста, опытом! Поля я никак убрать не могу - все нужны. Как вариант: думаю поставить entitycache + commerce_entitycache, чтобы сущности уже полностью были готовы при их загрузке, и класть их в файловый кэш через модуль filecache. Оперативной памяти у меня нет столько, чтобы разместить весь кэш туда, а БД разгружу. И ночью по крону взять и обойти все ноды (сейчас их примерно 7к), прогрузить через node_load, чтобы всё было в кэше и работать с этим. Только, блин, будет круто, если кэш сайта сбросить... Завтра опробую этот метод.
Буду рад любым советам!
Комментарии
использовать https://drupal.org/project/multifield , он хранит поля в одной таблице , но там есть ограничения - во вьюсе к примеру по этим полям нельзя фильтровать и не работает с search api
Да, я вчера тоже смотрел на этот модуль, но мне очень не нравится раздел ограничений Да и версия помечена автором, как нестабильная:
7.x-1.0-unstable9
И я ему охотно верю Выходит, что лучший вариант пока что - заранее всё кэшировать? Единственное, как-то придумать, чтобы кэш не очищался для полей и сущностей. А только при их обновлении или удалении.
ну тут надо смотреть в сторону https://drupal.org/project/expire
Да, его я тоже поставил, но что-то не работает Или я настроил его неправильно, или несовместимость какая-то...
Хм, что-то с Expire мне не ясно ничего. Вернул кэш в БД. Вроде бы настроил expire. Смотрю ноды - они попадают в кэш. Очищаю кэш - они оттуда уходят. А вот как сделать, чтобы не уходили? А только при обновлении / удалении? Или данный модуль для другого?
Покупаем сервер потолще, админа потолковее и не паримся ... темболее 40 полей вообще фигня ... ну а если уж решили крутить, xhprof + xdebug вам в помощь, расскажет и подскажет что делать.
Ну а если честно, подсказать по этому вопросу особо нечего, друпал всетаки система для быстрой разработки, а не работы, но и его можно неплохо накрутить, но вы никогда не увидите генерации страницы меньше секунды ... ну если только пустой с кастомным деливери колбеком без блоков!
Кстати какие у вас показатели времени генерации бекенда и фронтенда?
А зачем мне заниматься профилированием, если я причину проблемы описал в самом первом сообщении?
Гляну ночью и отпишусь.
Пишу показатели от модуля Devel. Все страницы смотрю, соответственно, под админом.
Главная страница (уже из кэша):
Одна из страниц каталога, 44 товара:
Страница журнала в админке:
Страница модулей:
Страница admin/index:
Вот как-то так.
11 сек на генерацию, это конечно круто, ещё наверно html весь стандартный без заголовков кеша статики на стороне сервере, плюс ещё наверно секунд пять ...
Ну что тут скажешь, прототип собрали, молодцы, пришло время заняться программированием! Узкие места знаете, ТЗ имеется, прототип имеется, вперед и с песней
это у вас не со структурой БД проблемы, это либо настройки php - не так давно причиной подобного бедствия оказался open_basedir на хостинге(суть прикола - при любом использовании полного пути к файлу\еще кому происходит некий тормоз, напоминающий обращение к диску(по крайней мере по времени), соответственно, если таких обращений много... например, commerce kickstart сразу после установки тормозил по хуже битрикса после неё же), кроме того кривые настройки акселератора могут при определенных условиях способны вызывать подобные тормоза, либо, как вариант, mysql сервер находится на противоположной стороне земного шара относительно сайта, словом, суть в том, что проблемы с хостингом(вероятность примерно 90%).
Спасибо за ответы! Таки займусь профилированием тогда.
ТС, возможно ли экспортировать проблемный тип контента в фичу или ещё куда?
Для эксперимента нужно с наверняка положительным результатом