Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

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

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

Змінено користувачем 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,
и тд

Надіслати
Поділитися на інших сайтах

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

да нет, как раз тут не спички, если у вас сто товаров тогда спички, а если 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 weeks later...

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

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

Надіслати
Поділитися на інших сайтах


  • 1 month later...

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 weeks later...

Возможно я непонятно выразился. Мои изменения отностительно атрибутов касались метода 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 weeks later...

По поводу кеширования советую этот модуль 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 months later...

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

 

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

 

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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.