Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Time per request: 44.224 [ms]
SELECT c.id, c.pagetitle FROM `modx_site_content` as c
left join modx_shopmodx_products as p on p.resource_id = p.id
WHERE sm_price
limit 10
Занимает 0,3 сек. Но это потому что таблицы не связанные. Перевел эти таблицы на innoDB и настроил внешний ключ. Этот же запрос 0,016 сек. Повторный — 0.000 (мускул тоже кеширует результаты).SELECT c.id, c.pagetitle, sm_price FROM `modx_site_content` as c
inner join modx_shopmodx_products as p on p.resource_id = c.id
WHERE sm_price between 500 and 1000
order by sm_price desc
limit 10В каждом отдельном магазине уже будет докручиваться индивидуальная структура и логика, исходя из бизнес-логики.
Приведенные sql слишком простые. Выборка по цене это только один критерий запроса.Вы еще смотрите, что там сортировка. Одна сортировка может пяти условий стоить.
Правильно ли я понимаю, что если завтра у меня появляется новый товар с новым набором характеристик, то как минимум придется изменить/добавить структуру таблиц (изменить код?)?Нет. В большинстве случаев ничего не придется делать. Для этого есть TV-параметры. Но если будет специфическая задача, то многое действий не потребуется — расширили класс, создали для него расширенную таблицу. перенесли все записи туда, а в описании класса указали имя другой таблицы.
Давайте я не буду сейчас приводить кучу запросов,
действий не потребуется — расширили класс, создали для него расширенную таблицу.
Я хочу узнать, сколько времени будет отрабатывать запрос при >=13 ктоварах и 4 критериях поиска.Так же в пределах 0.03 сек, ито пессимистичный прогноз. Сложности с выборкой — это таблиц 10, и как минимум в трех из них несколько сотен тысяч записей.
Т.е. привлечение разработчика под эту задачу обязательно.Со временем я буду добавлять готовые решение, да может и сообщество подсобит, но пока пишется именно платформа, а она да, потребует для реализации конкретных магазинов программиста. Но это чисто для крупных магазинов. Для небольших (до 1000 товаров) можно обойтись штатными средствами modResource + modTemplate + modTemplateVar + getResource и прочие штатные компоненты. Там 100% MODX-технологии без всяких.
да может и сообщество подсобит
Правильно ли я понимаю, что если завтра у меня появляется новый товар с новым набором характеристик, то как минимум придется изменить/добавить структуру таблиц
Кстати, при этом сколько товаров находится в магазине (13 000)?
И считаю структуру бд не оптимальной для создания больших каталогов с произвольным набором параметров
У меня 800 ктоваров (значений атрибутов 8 миллионов)
Подоплека вопроса выше была такая: «Какие индексы используются в вашей базе? Т.к. используя TV парметры для хранения значений дополнительных характеристик невозможно сделать быстрые фильтры по базе из 13к товаров.»Это еще почему? Чем таблица TV отличается от других таблиц? Ее отличие и ограничение только в том, что колонка value — текстовое поле (о этом говорил выше), и элементарная выборка с сортировкой цен, к примеру, даст глупый результат, и для корректности придется тип данных налету конвертировать, что однозначно скажется на производительности.
Запросы приведеные выше тестировались на базе какого объема?Заявленного. 13000 товаров + 43000 TV-шек. Или вас в мегабайтах интересует?
Или вас в мегабайтах интересует?
Запросы приведеные выше тестировались на базе какого объема?
13000 товаров + 43000 TV-шек
А выделять товары в отдельную таблицу стоит лишь из-за того, что в основном дереве их не удобно редактировать.Ставьте для своих товаров show_in_tree=0, устанавливайте groupEdit, и заявленная проблема перестанет быть проблемой (само собой речь о Рево).
По моему, проблема базы сильно преувеличена.А по-моему вообще не преувеличена. Если одна выборка выполняется даже 0,3 сек., то вся страница никак не сможет быть отдана менее чем за это 0,3 сек. Оптимизировав базу можно сократить нагрузку в десятки раз. У меня один закрытый проект есть (система пропусков), там поиск выполняется после каждой добавленной буквы в поисковую строку. Записей очень много и запросы сложные, из нескольких таблиц. Так вот когда с ростом базы нагрузка возрастала, просто оптимизация базы (без изменения запросов), позволяла сократить время выполнения запроса с нескольких секунд до нескольких тысячных секунды.
А большинство «оптимизаций» ведут к тому, что при очередном обновлении системы надо будет заново все «оптимизировать»Сорри, с чего это вдруг оптимизация в виде правильной настройки ключей у связанных таблиц должна как-то пострадать при очередном обновлении системы?
ПС. Самая правильная оптимизация — убеждать разработчиков modx в тех или иных «оптимизациях».Нельзя под все оптимизироваться. Вот судя по вашему нику — вы админ. У вас есть на вооружении Ось, которую поставил, и только пиво попиваешь?
Разработка интернет-магазина 13000+ товаров на MODX Revolution. Часть 1