Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Оптимизация движка под 120 000 товаров


 Поделиться

Рекомендованные сообщения

Да, я не могу представить ситуацию, когда захочется именно дублировать дополнительно для фильтра то, что уже и так есть в атрибутах.

Теоретически я понимаю, плюс всего один - возможность отделения мух от котлет, если кол-во атрибутов и кол-во элементов, участвующих в фильтрации, слишком разное. Но на практике не встречал таких ситуаций. То ли атрибутов у каждого товара несколько десятков, а фильтр нужен не по всем, а только по парочке? Для снижения нагрузки на фильтр, получается? То ли ещё что?

Можете на конкретных примерах пояснить практические плюсы? Или только тот, что я назвал, и он все неудобства покрывает?

Изменено пользователем snastik
Ссылка на комментарий
Поделиться на других сайтах

вот пара моих примеров

Во, и как раз то, что называется "гостевой эффект" :)

Тыкаю наугад и выбираю в фильтре:

Категория: Электрогенераторы

Тип генератора: Бензиновые

Мощность кВт: 6 - 7 кВт

Количество фаз: 3 фазы

Метод запуска: Автоматический (АВР)

Остается 5 товаров. Нажимаю на первый - и вижу мощность 7.5 кВт.

Какая замечательная иллюстрация. Это то, что называется отсутствием нормализации и вредом дублирования.

В общем, идея, как я понял, именно та, которую я называл. В атрибутах есть мощности (5.5, 6.5, ... кВт), а в фильтре для уменьшения вариантов они включаются в одну из групп (5-7 кВт и т.д.)

Но я до сих пор не понимаю зачем так много дублировать и вносить ошибки, если проще добавить ещё один "группировочный" атрибут. Смысл тот же, что при дублировании (атрибуты отдельно, фильтр отдельно), но таких групп надо 2-3 (из 20 в среднем атрибутов на каждый товар), правильно? То есть 2-3 лишних атрибута для служебных целей. А остальные можно просто галочками включать или выключать для участия в работе фильтра. Вероятность ошибок - гораздо ниже, чем если всё то же самое мы банально ВЫНУЖДЕНЫ дублировать. Один раз в атрибутах, другой - в значениях фильтра.

Об этом же и речь.

Да, естественно - желательно иметь возможность указывать, какие атрибуты и опции участвуют в работе фильтра и навигации. Например, это "группировочный" с диапазонами - есть в фильтре, а пара атрибутов с точными значениями мощности (номинальная и максимальная) - не участвуют. (Не знаю, есть ли это в том фильтре, который на ваших сайтах используется.)

Но дублировать?... Прелести подхода я и после этих примеров ещё не понял, скорее убедился в обратном. Или не туда смотрел и не всё увидел?

Ссылка на комментарий
Поделиться на других сайтах


Исправил ошибочку, выложил на гитхаб.

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

$query = $this->db->query("SELECT DISTINCT *, p.rating, pd.name AS name, p.image, m.name AS manufacturer,

таким образом

$query = $this->db->query("SELECT DISTINCT pd.name AS name, p.image, m.name AS manufacturer,

ничего хорошего не дало - если убрать *, сыпятся нотисы:

Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: image in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 184Notice: Undefined index: tax_class_id in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 191Notice: Undefined index: special in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 196Notice: Undefined index: special in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 203Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 215Notice: Undefined index: name in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 217Notice: Undefined index: model in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 218Notice: Undefined index: stock_status_id in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 219Notice: Undefined index: date_available in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 220Notice: Undefined index: sku in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 221Notice: Undefined index: upc in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 222Notice: Undefined index: quantity in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 226Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 232

Вы проверяли это у себя? Мне кажется, нужно сделать так (по крайней мере, у меня так работает):

$query = $this->db->query("SELECT DISTINCT p.product_id, p.price, p.tax_class_id, p.model, p.sku,  p.quantity, p.stock_status_id, p.date_available, p.upc, pd.name AS name, p.image, m.name AS manufacturer,

Ссылка на комментарий
Поделиться на других сайтах

Во, и как раз то, что называется "гостевой эффект" :)

Тыкаю наугад и выбираю в фильтре:

Категория: Электрогенераторы

Тип генератора: Бензиновые

Мощность кВт: 6 - 7 кВт

Количество фаз: 3 фазы

Метод запуска: Автоматический (АВР)

Остается 5 товаров. Нажимаю на первый - и вижу мощность 7.5 кВт.

Какая замечательная иллюстрация. Это то, что называется отсутствием нормализации и вредом дублирования.

В общем, идея, как я понял, именно та, которую я называл. В атрибутах есть мощности (5.5, 6.5, ... кВт), а в фильтре для уменьшения вариантов они включаются в одну из групп (5-7 кВт и т.д.)

Но я до сих пор не понимаю зачем так много дублировать и вносить ошибки, если проще добавить ещё один "группировочный" атрибут. Смысл тот же, что при дублировании (атрибуты отдельно, фильтр отдельно), но таких групп надо 2-3 (из 20 в среднем атрибутов на каждый товар), правильно? То есть 2-3 лишних атрибута для служебных целей. А остальные можно просто галочками включать или выключать для участия в работе фильтра. Вероятность ошибок - гораздо ниже, чем если всё то же самое мы банально ВЫНУЖДЕНЫ дублировать. Один раз в атрибутах, другой - в значениях фильтра.

Об этом же и речь.

Да, естественно - желательно иметь возможность указывать, какие атрибуты и опции участвуют в работе фильтра и навигации. Например, это "группировочный" с диапазонами - есть в фильтре, а пара атрибутов с точными значениями мощности (номинальная и максимальная) - не участвуют. (Не знаю, есть ли это в том фильтре, который на ваших сайтах используется.)

Но дублировать?... Прелести подхода я и после этих примеров ещё не понял, скорее убедился в обратном. Или не туда смотрел и не всё увидел?

я же в первом сообщении написал что на 0.1.9.4 так и есть

имеется ввиду что у каждой группы атрибутов есть возможность выбора где она участвует.

1. для характеристики

2. для фильтра

3. для сравнения

насчет 7,5 киловат то тут указана мощность максимальная а менеджер отвечающий за группу товаров отнес его в диапазон до 7 киловат только лиш потому что он знает что номинал у него до 7

тут все сложно многие производители указывают только максимальную мощность и следят чтобы мы указывали именно так и никак иначе вторые указывают свою мощность в кВа что меньше киловата и тоже пытаются подсунуть свои циферки повыше а нам нужно подобрать генератор не по циферкам на капоте а по реальным показателям чтобы у клиента потом насос запустился или лебедка включилась и так далее.

rb2 если тема интересна милости прошу в личку, иначе тема по оптимизации опенкарт превратится в тему как выбрать генератор и на что стоит обратить свое внимание :-)

Изменено пользователем snastik
Ссылка на комментарий
Поделиться на других сайтах

Во, и как раз то, что называется "гостевой эффект" :)

Тыкаю наугад и выбираю в фильтре:

Категория: Электрогенераторы

Тип генератора: Бензиновые

Мощность кВт: 6 - 7 кВт

Количество фаз: 3 фазы

Метод запуска: Автоматический (АВР)

Остается 5 товаров. Нажимаю на первый - и вижу мощность 7.5 кВт.

Какая замечательная иллюстрация. Это то, что называется отсутствием нормализации и вредом дублирования.

В общем, идея, как я понял, именно та, которую я называл. В атрибутах есть мощности (5.5, 6.5, ... кВт), а в фильтре для уменьшения вариантов они включаются в одну из групп (5-7 кВт и т.д.)

Но я до сих пор не понимаю зачем так много дублировать и вносить ошибки, если проще добавить ещё один "группировочный" атрибут. Смысл тот же, что при дублировании (атрибуты отдельно, фильтр отдельно), но таких групп надо 2-3 (из 20 в среднем атрибутов на каждый товар), правильно? То есть 2-3 лишних атрибута для служебных целей. А остальные можно просто галочками включать или выключать для участия в работе фильтра. Вероятность ошибок - гораздо ниже, чем если всё то же самое мы банально ВЫНУЖДЕНЫ дублировать. Один раз в атрибутах, другой - в значениях фильтра.

Об этом же и речь.

Да, естественно - желательно иметь возможность указывать, какие атрибуты и опции участвуют в работе фильтра и навигации. Например, это "группировочный" с диапазонами - есть в фильтре, а пара атрибутов с точными значениями мощности (номинальная и максимальная) - не участвуют. (Не знаю, есть ли это в том фильтре, который на ваших сайтах используется.)

Но дублировать?... Прелести подхода я и после этих примеров ещё не понял, скорее убедился в обратном. Или не туда смотрел и не всё увидел?

ну да, тут напрашивается полузнок с шагом .5, но включать в выборку фильтра значения которого там не должно быть это криво.
Ссылка на комментарий
Поделиться на других сайтах

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

$query = $this->db->query("SELECT DISTINCT *, p.rating, pd.name AS name, p.image, m.name AS manufacturer,

таким образом

$query = $this->db->query("SELECT DISTINCT pd.name AS name, p.image, m.name AS manufacturer,

ничего хорошего не дало - если убрать *, сыпятся нотисы:

Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Warning: array_merge() [function.array-merge]: Argument #2 is not an array in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 50Notice: Undefined index: rating in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 52Notice: Undefined index: reviews in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 53Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\model\catalog\product.php on line 54Notice: Undefined index: image in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 184Notice: Undefined index: tax_class_id in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 191Notice: Undefined index: special in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 196Notice: Undefined index: special in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 203Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 215Notice: Undefined index: name in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 217Notice: Undefined index: model in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 218Notice: Undefined index: stock_status_id in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 219Notice: Undefined index: date_available in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 220Notice: Undefined index: sku in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 221Notice: Undefined index: upc in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 222Notice: Undefined index: quantity in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 226Notice: Undefined index: product_id in Z:\home\localhost\ocstore1521\catalog\controller\product\category.php on line 232

Вы проверяли это у себя? Мне кажется, нужно сделать так (по крайней мере, у меня так работает):

$query = $this->db->query("SELECT DISTINCT p.product_id, p.price, p.tax_class_id, p.model, p.sku,  p.quantity, p.stock_status_id, p.date_available, p.upc, pd.name AS name, p.image, m.name AS manufacturer,

* нужно не убирать, а заменить на соответвующие поля из таблицы product

например

p.image,
p.price,
p.tax_class_id,
и тд

Ссылка на комментарий
Поделиться на других сайтах

* нужно не убирать, а заменить на соответвующие поля из таблицы product

например

p.image,
p.price,
p.tax_class_id,
и тд

Да опять экономия на спичках...

Ссылка на комментарий
Поделиться на других сайтах


Да опять экономия на спичках...

да нет, как раз тут не спички, если у вас сто товаров тогда спички, а если 100+тыс тогда далеко не спички.
Ссылка на комментарий
Поделиться на других сайтах

Возможно я непонятно выразился. Мои изменения отностительно атрибутов касались метода getProductAttributes - это вывод атрибутов в товаре. К фильтру это отношения не имеет. Да и FilterPro в стандартном OpenCart нет.

В вашем случае да, надо улучшать FilterPro, ведь в нем медленный запрос? Или я ошибаюсь?

Мои изменения работают вот тут: http://toporchillo.j...t&product_id=42

Атрибуты, как видите, показываются.

А так , довольно сложно синхронизировать 1.5.5 и 1.5.2 вот и ошибки.

Пример у вас ошибками сыпет.

У меня ваши правки работают на 1.5.5.1 хорошо, .rating сам выпилил - догадался.

Но вот обнаружился еще косяк - перестала корректно работать сортировка по параметрам (имя, цена, модель)

Ссылка на комментарий
Поделиться на других сайтах

rb2 если тема интересна милости прошу в личку, иначе тема по оптимизации опенкарт превратится в тему как выбрать генератор и на что стоит обратить свое внимание :-)

Мне интересна тема производительности фильтра в контексте сабжа (для больших магазинов, 100k+ товаров).

Да опять экономия на спичках...

Ха 3 раза. Это не спички, там огромнейшие объёмы набегают, если выбирать всё подряд. А ещё если джойнить это всё направо и налево.Не хватает места не то что в памяти -- временные разделы на диске заканчиваются, когда MySQL пытается временные таблицы записать. И валится с ошибкой (это раз). И о какой оптимизации тут вообще можно говорить (это два).

Тут вон недавно url_alias с 256 символов до 32 кто-то сокращал - и одно это дало хороший эффект.

На хай-лоад проектах вообще каждый HTTP запрос и размер кук принято считать, а тут - 'select *' называют спичками :)))

Ссылка на комментарий
Поделиться на других сайтах


Возможно я непонятно выразился. Мои изменения отностительно атрибутов касались метода getProductAttributes - это вывод атрибутов в товаре. К фильтру это отношения не имеет. Да и FilterPro в стандартном OpenCart нет.

В вашем случае да, надо улучшать FilterPro, ведь в нем медленный запрос? Или я ошибаюсь?

Так я про фильтр ни слова не говорил - я его отключал, когда проверял изменения.

В данном конкретном случает нужно SELECT * и на скорость действительно не влияет, так как кол-во записей, загружаемое этим запросом не болше 15-25-50-75-100 (зависит от настроек пагинации). Вернуть звездочку, и не путайте меня :-)

О чем в моем сообщении и шла речь! Только я вместо * подставил все нужные поля конкретно из моего случая.

Ссылка на комментарий
Поделиться на других сайтах

Мне интересна тема производительности фильтра в контексте сабжа (для больших магазинов, 100k+ товаров).

Ха 3 раза. Это не спички, там огромнейшие объёмы набегают, если выбирать всё подряд. А ещё если джойнить это всё направо и налево.Не хватает места не то что в памяти -- временные разделы на диске заканчиваются, когда MySQL пытается временные таблицы записать. И валится с ошибкой (это раз). И о какой оптимизации тут вообще можно говорить (это два).

Тут вон недавно url_alias с 256 символов до 32 кто-то сокращал - и одно это дало хороший эффект.

На хай-лоад проектах вообще каждый HTTP запрос и размер кук принято считать, а тут - 'select *' называют спичками :)))

Спички были протестированны на базе с 750к+ записями и весом в 850мб и выборке 10.000 :)

А у вас выборка как выше было написано ну максимум 100 записей более того поля все в индексе как я помню...

Если на то пошло хотите оптимизировться на чтении переходите на heap таблицы и регулярно их бекапте...

У кого есть желание локально поэкспериментировать поменяйте тип таблицы и запустите бенчер...

Ссылка на комментарий
Поделиться на других сайтах


Спички были протестированны на базе с 750к+ записями и весом в 850мб и выборке 10.000 :)

А у вас выборка как выше было написано ну максимум 100 записей более того поля все в индексе как я помню...

Если на то пошло хотите оптимизировться на чтении переходите на heap таблицы и регулярно их бекапте...

У кого есть желание локально поэкспериментировать поменяйте тип таблицы и запустите бенчер...

А Вы тестируете на одного пользовтаеля? То есть запрос одной страницы в одной сессии? А если на 30 - 50 сессий, результат будет такой же?
Ссылка на комментарий
Поделиться на других сайтах

Ну сами то подумайте :) да еще и кеш никто не отменял (напоминаю)

А вот про хипы...

myisam

Showing rows 0 - 29 ( 108,408 total, Query took 0.0136 sec)

MEMORY

Showing rows 0 - 29 ( 108,408 total, Query took 0.0003 sec)

Ссылка на комментарий
Поделиться на других сайтах


На хай-лоад проектах вообще каждый HTTP запрос и размер кук принято считать, а тут - 'select *' называют спичками :)))

Дык хай-лоад или 120к+ товаров?

Хай-лоад это сколько запросов в сутки?

Хай-лоад - это на виртуалах или на VDS или всетаки отдельные сервера, но с криворукими админами, а может облачка уже мало?

Прошу уточнить 3 момента...

P.S. Про размер кук особливо порадовало :)

Ссылка на комментарий
Поделиться на других сайтах


В данном конкретном случает нужно SELECT * и на скорость действительно не влияет, так как кол-во записей, загружаемое этим запросом не болше 15-25-50-75-100 (зависит от настроек пагинации). Вернуть звездочку, и не путайте меня :-)

Насколько я помню, LIMIT в запросах с ORDER BY на последних страницах выбирает все данные, сортирует, а потом отбрасывает и возвращает последние 100 или сколько там. И такое поведение вплоть до MySQL 5.6.2. Так что временные таблицы (или merge file) будет использоваться при больших объемах таблиц, которые ещё мержатся друг с другом.

Yesvik показывал, как с этим можно бороться. Суть в том, чтобы вложенным запросом сначала выбрать ID нужной сотни товаров, а только потом навешивать на них все JOIN-ы.

Спички были протестированны на базе с 750к+ записями и весом в 850мб и выборке 10.000 :)

А у вас выборка как выше было написано ну максимум 100 записей более того поля все в индексе как я помню...

Мы с этими спичками сталкивались на 800к товаров, с выборками по 1000 товаров. Простейшая операция по укорачиванию `SELECT *` и выборка всего нескольких используемых полей убрала тормоза и сделала человека счастливым. По его словам, всё стало летать. Без всяких переездов на свои сервера и доп. оптимизаций. Не знаю, делал ли он то, что Yesvik предложил - там ещё экономия ресурсов получалась. Или этих спичек хватило.

Про максимум 100 записей - см. выше.

Дык хай-лоад или 120к+ товаров?

Одно другому не мешает. В чём вопрос-то? По сути.

Понимаю ли я разницу? Понимаю.

Хай-лоад это сколько запросов в сутки?

Хай-лоад - это на виртуалах или на VDS или всетаки отдельные сервера, но с криворукими админами, а может облачка уже мало?

Прошу уточнить 3 момента...

Что-то Вы издалека начали. Давайте сэкономим друг другу время, а? У меня член 25 см.

P.S. Про размер кук особливо порадовало :)

Многих радует, когда докапываются. И прикидывают с калькуляторами и бенчмарками.

http://yuiblog.com/b...esearch-part-3/

http://developer.yah...tml#cookie_size

http://developer.yah...tml#cookie_free

Хотя до некоторых всё равно не доходят такие мелочи, кто бы ни объяснял. Всё готовы закешировать и объявить это решение панацеей.

Ссылка на комментарий
Поделиться на других сайтах


Мы с этими спичками сталкивались на 800к товаров, с выборками по 1000 товаров. Простейшая операция по укорачиванию `SELECT *` и выборка всего нескольких используемых полей убрала тормоза и сделала человека счастливым. По его словам, всё стало летать. Без всяких переездов на свои сервера и доп. оптимизаций. Не знаю, делал ли он то, что Yesvik предложил - там ещё экономия ресурсов получалась. Или этих спичек хватило.

Про максимум 100 записей - см. выше.

Вот к стате хороший пример при выборе 1000 товаров - у человека ответы в кеш скорее всего не влезали или кей буфер переполнялся просто... над бы это дело как нить сэмитировать... ну предлагать поднять лимит на один запрос в кеше я думаю уже не надо... :)

Просто где она там выборка с ответом включащих описание товара и еще каких полей которые не индексированы в 100+ позиций найти не могу... а то бы бенчнул. Серчь не предлагать он тупой это и без того понятно...

Ссылка на комментарий
Поделиться на других сайтах


Многих радует, когда докапываются. И прикидывают с калькуляторами и бенчмарками.

http://yuiblog.com/b...esearch-part-3/

http://developer.yah...tml#cookie_size

http://developer.yah...tml#cookie_free

Хотя до некоторых всё равно не доходят такие мелочи, кто бы ни объяснял. Всё готовы закешировать и объявить это решение панацеей.

Статья порадовала... тут хоть понятно почему это происходит :)

Только это было уже можно сказать в прошлом веке... они бы еще ютьюб тогда потестили в 720р

Table 1. Response times for various cookie sizes Cookie Size Median Response Time (Delta)

0 bytes 78 ms (0 ms)

500 bytes 79 ms (+1 ms)

1000 bytes 94 ms (+16 ms)

1500 bytes 109 ms (+31 ms)

2000 bytes 125 ms (+47 ms)

2500 bytes 141 ms (+63 ms)

3000 bytes 156 ms (+78 ms)

Note: Times are for page loads on DSL (~800 kbps).

Ссылка на комментарий
Поделиться на других сайтах


  • 2 недели спустя...

Насколько я помню, LIMIT в запросах с ORDER BY на последних страницах выбирает все данные, сортирует, а потом отбрасывает и возвращает последние 100 или сколько там. И такое поведение вплоть до MySQL 5.6.2. Так что временные таблицы (или merge file) будет использоваться при больших объемах таблиц, которые ещё мержатся друг с другом.

Иммено так и вот сегодня поймал то о чем вы говорили, а иммено увидел converting HEAP to MyISAM... все дело в том что сначала действительно все выбирается во временную таблицу в память и если ее не хватает то все пишется на диск и это просто убивает производительность. А при select * выбераются туда все поля... решается вопрос повышением хипа и верменной таблицы... т.ч. совет вашему клиенту посмотреть размер таблиц которые в выборке и сравнить их с этими параметрами, т.к. думаю что он может всеравно встать на теже грабли что и с селект * только чуть позже.

Ссылка на комментарий
Поделиться на других сайтах


  • 1 месяц спустя...

Hi!

Izvinite za shrift... russkogo netu :)

Nachnem s togo chto s IT osobo ne druzzu :)

Problema u menja takaja....

Opencart dvizzok - bolee 100 000 tovarov, v buduschem okolo 500 000...

 

VPS Hosting data:

70GB Hard Disk

3072MB/6144MB RAM

7000GB Bandwidth

 

Saijt tormozit - normaljno otkrivaetsa toljko home stranica... Sokratil kategorii tovarov do minimuma (4-8)....Brand List to Product page - inogda 30 sec... Admin Product page load time - 1 min, no chashche vsego 504 Gateway Time-out

Search - uzzasno medlenno, ili 504 Gateway Time-out

 

admin/php.ini

 

magic_quotes_gpc = Off;
register_globals = Off;
default_charset    = UTF-8;
memory_limit = 2048M;
max_execution_time = 180000;
upload_max_filesize = 9999M;
safe_mode = Off;
mysql.connect_timeout = 200;
session.use_cookies = On;
session.use_trans_sid = Off;
session.gc_maxlifetime = 12000000;
allow_url_fopen = on;

 

Vozmozzno li nastroitj, za razumnuju cenu, chtobi vsje rabotalo, kak nado?

 

Ссылка на комментарий
Поделиться на других сайтах


  • 2 недели спустя...

Возможно я непонятно выразился. Мои изменения отностительно атрибутов касались метода getProductAttributes - это вывод атрибутов в товаре. К фильтру это отношения не имеет. Да и FilterPro в стандартном OpenCart нет.

В вашем случае да, надо улучшать FilterPro, ведь в нем медленный запрос? Или я ошибаюсь?

Мои изменения работают вот тут: http://toporchillo.j...t&product_id=42

Атрибуты, как видите, показываются.

А так , довольно сложно синхронизировать 1.5.5 и 1.5.2 вот и ошибки.

Пример у вас ошибками сыпет.

У меня ваши правки работают на 1.5.5.1 хорошо, .rating сам выпилил - догадался.

Но вот обнаружился еще косяк - перестала корректно работать сортировка по параметрам (имя, цена, модель)

Вот и до меня наконец то дошло, что сортировка вообще не работает при оптимизации (это я обновил свою 1.5.2.1 и заново пытался ее ускорить) :-)

filterpro то использует свою сортировку, вот и не было видно ошибок, а сейчас стало сразу понятно + у вас на демке даже все эти ошибки видны (несмотря на отсутствие производителей или акций, можно открыть поиск и попытаться отсортировать выборку, например, по цене)

Ссылка на комментарий
Поделиться на других сайтах

Параметры VPS: 12 ядер; 1ГБ оперативы, загрузить ее по полной так и не получилось, максимум 290МБ.

 

12 ядер?  :ugeek: Это где такие ВПС? А частота какая гарантированная? Что за тип виртуализации? Просто интересно...

 

У других ВДС с 

3072MB/6144MB RAM

Жесть, и где такая халява блин?

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах


  • 5 недель спустя...

По поводу кеширования советую этот модуль http://www.opencart.com/index.php?route=extension/extension/info&extension_id=3477 с ним скорость загрузки увеличилась в 2 раза. Все шустро работает сейчас на сайте 7000 товаров.Из тех модулей, что думал могут нагрузить сайт, стоит фильтр про от фрилансера и поиск с морфологией и релевантностью  (модуля отличные) тормозов пока не обнаружено. Из всех модулей кеширования, что пробовал, этот самый шустрый!!!

Ссылка на комментарий
Поделиться на других сайтах

По поводу кеширования советую этот модуль http://www.opencart.com/index.php?route=extension/extension/info&extension_id=3477 с ни-кэгм скорость загрузки увеличилась в 2 раза. Все шустро работает сейчас на сайте 7000 товаров.Из тех модулей, что думал могут нагрузи-кэшть сайт, стоит фильтр про от фрилансера и поиск с морфологией и релевантностью  (модуля отличные) тормозов пока не обнаружено. Из всех модулей кеширования, что пробовал, этот самый шустрый!!!

Кэш-кэш-кэш... Кэш - НЕ панацея.

Тоже пробовал его нормальный кешер!

Ссылка на комментарий
Поделиться на других сайтах


  • 8 месяцев спустя...

Кэш-кэш-кэш... Кэш - НЕ панацея.

 

может и не панацея... предложите свое решение? у вас есть метод решения скорости работы opencart на 100-150К товаров путем оптимизации именно движка, запросов и так далее а не оптимизации сервера... так как я например на шаред сижу... и там ничего не наоптимизируешь...

 

есть решения или нет?

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.