Jump to content
Sign in to follow this  
pashast

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

Recommended Posts

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

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

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

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

Мощность кВт: 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 если тема интересна милости прошу в личку, иначе тема по оптимизации опенкарт превратится в тему как выбрать генератор и на что стоит обратить свое внимание :-)

Edited by snastik

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

$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,
и тд

Share this post


Link to post
Share on other sites

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

например

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

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

Share this post


Link to post
Share on other sites

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

да нет, как раз тут не спички, если у вас сто товаров тогда спички, а если 100+тыс тогда далеко не спички.

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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)

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

В данном конкретном случает нужно 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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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).

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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?

 

Share this post


Link to post
Share on other sites

Возможно я непонятно выразился. Мои изменения отностительно атрибутов касались метода 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 то использует свою сортировку, вот и не было видно ошибок, а сейчас стало сразу понятно + у вас на демке даже все эти ошибки видны (несмотря на отсутствие производителей или акций, можно открыть поиск и попытаться отсортировать выборку, например, по цене)

Share this post


Link to post
Share on other sites

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

 

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

 

У других ВДС с 

3072MB/6144MB RAM

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

  • +1 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By valerykurak
      Здравствуйте. Есть обычная контактная форма в ней несколько select'ов. Образование, страна, регион. Поля образований хранятся прямо в самой форме. Можно ли сделать страна регион как в админ панели опенкарт к примеру при добавления адреса покупателя?
    • By asd1992
      Здравствуйте, в каталоге товаров здесь https://test.miturbo.ru/category/xiaomi-redmi-note-8
      Нужно вывести код товара. Как мне это сделать? В БД есть таблица oc_product
      и в этой таблице есть значение model в этом значении есть код товара у каждого товара.

      Мне нужно вывести код товара этот. но просто вот так: <span>{{ model }}</span> не получается.
      А в product.twig <span>{{ model }}</span> вот так получается.

      За вывод этой страницы https://test.miturbo.ru/category/xiaomi-redmi-note-8 отвечает файл category_grid.twig . Если в этот файл добавить <span>{{ model }}</span> то нечего не получится, а если в product.twig то получится. {{ model }} означает код товара. Как мне сделать так чтобы в category_grid.twig тоже получалось к каждому товару выводить свой код товара.

      Это мне из БД как то вытаскивать или нет? Если уже выводить из БД то нужно сделать так чтобы к каждому товару свой код товара подходящий выводился, а не у всех товаров был одинаковый код товара.

      Буду очень благодарен.
    • By valerykurak
      Здравствуйте, получается вывести лишь один элемент из mysql таблицы  с помощью php и sql запроса, как на opencart вывести абсолютно все элементы?
    • By valauto
      После попытки сделать бэкап базы данных на локалхосте выскакивает ошибка, подскажите пожалуйста как исправить: Uncaught Exception: Error: Unknown column 'sort_order' in 'order clause'<br />Error No: 1054<br />SELECT * FROM `oc_event` WHERE `trigger` LIKE 'catalog/%' AND status = '1' ORDER BY `sort_order` ASC in C:\xampp\htdocs\valauto\upload-3033-rs3\system\library\db\mysqli.php:40 Stack trace: #0 C:\xampp\htdocs\valauto\upload-3033-rs3\system\library\db.php(45): DB\MySQLi->query('SELECT * FROM `...') #1 C:\xampp\htdocs\valauto\upload-3033-rs3\catalog\model\setting\event.php(4): DB->query('SELECT * FROM `...') #2 C:\xampp\htdocs\valauto\upload-3033-rs3\system\storage\modification\system\engine\loader.php(248): ModelSettingEvent->getEvents() #3 C:\xampp\htdocs\valauto\upload-3033-rs3\system\engine\proxy.php(47): Loader->{closure}(Array, Array) #4 C:\xampp\htdocs\valauto\upload-3033-rs3\catalog\controller\startup\event.php(7): Proxy->__call('getEvents', Array) #5 C:\xampp\htdocs\valauto\upload-3033-rs3\system\storage\modification\system\engine\action.php(79): ControllerStartupEvent->index() #6 C:\xampp\htdocs\valauto\up in C:\xampp\htdocs\valauto\upload-3033-rs3\system\library\db\mysqli.php on line 40
    • By karmirarev
      Всем привет! Есть проблема, бьюсь уже второй день... Ситуация следующая:
      Сайт помер (не работает админка и фронт), пообщавшись с заказчиком решили что проще новый сайт пилить, так же на opencart'е как и было. Но перенося базу данных через mysql, полным бекапом, падает в ошибку.
      Собственно вопрос, как перенести базу(только товары), так чтоб это работало. В принципе в качестве ответа приму даже просто перечисление таблиц к переносу. Выручайте братцы.SOS.
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.