Jump to content
pashast

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

Recommended Posts

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

 

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

Одной оптимизацией движка много не добьешься. Повышение быстродействия работы сайта - комплексная задача. А если вы при 100к товара не можете себе позволить что-то большее чем шаред-хостинг, то может лучше бизнес, а не сайт, оптимизировать :-)?

Share this post


Link to post
Share on other sites

У меня стоит VPS .

160 000 товаров. Много подкатегорий

Стандартный модуль Категории снес.

 

Была проблема при открытии подкатегорий. Долго грузилось.

Вычитал что надо делать оптимизацию стандартными методами mysql .

Нашел как, сделал.

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

Вот поделился свою радостью, друзья не поймут. а тут можно высказаться =)) 

Share this post


Link to post
Share on other sites

У меня стоит VPS .

160 000 товаров. Много подкатегорий

Стандартный модуль Категории снес.

 

Была проблема при открытии подкатегорий. Долго грузилось.

Вычитал что надо делать оптимизацию стандартными методами mysql .

Нашел как, сделал.

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

Вот поделился свою радостью, друзья не поймут. а тут можно высказаться =)) 

Радостью то вы поделились, но может еще и по сути что то напишете? :) Наверняка многих заинтересует, что именно вы нашли и как выполнили оптимизацию, потому что в теме предложенных методов много, но конкретики сильно меньше

Share this post


Link to post
Share on other sites

Радостью то вы поделились, но может еще и по сути что то напишете? :) Наверняка многих заинтересует, что именно вы нашли и как выполнили оптимизацию, потому что в теме предложенных методов много, но конкретики сильно меньше

ocstore 15521.

Модуль категорий удален вообще.

в mysql когда уже товар загружен, зашел выделил все поля в бд, с выделенным - оптимизировать.

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

да вроде и все. в vqmode стоит пару модулей, ничего лишнего. 

Share this post


Link to post
Share on other sites

igorfelix, скажите а в админке у вас не глючит когда открываете список товаров или категорий?

Share this post


Link to post
Share on other sites

igorfelix, скажите а в админке у вас не глючит когда открываете список товаров или категорий?

категорий не очень много - они быстро открываются. а вот список товаров - немного с задержкой. ну там можно выставлят ьпоказ по 100 ед товара или по 200. а вообще я не использую это,

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

 

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

можно через БД картинки для категорий указать, не используя файловый менеджер. 

Share this post


Link to post
Share on other sites

ocstore 15521.

Модуль категорий удален вообще.

в mysql когда уже товар загружен, зашел выделил все поля в бд, с выделенным - оптимизировать.

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

да вроде и все. в vqmode стоит пару модулей, ничего лишнего.

Эта оптимизация - что-то вроде дефрагментации диска, и всё. Ничего реально в запросах Вы этим не оптимизировали.

Только потому, то свой VPS, хостер не стучит по голове за превышение нагрузки на БД. А если на 160к товаров летает без оптимизации, только на индексах - похоже, у вас просто довольно мощный VPS. Благодаря ocStore - что-то кешируется, что-то оптимизирвоано в запросах.

Share this post


Link to post
Share on other sites

Эта оптимизация - что-то вроде дефрагментации диска, и всё. Ничего реально в запросах Вы этим не оптимизировали.

Только потому, то свой VPS, хостер не стучит по голове за превышение нагрузки на БД. А если на 160к товаров летает без оптимизации, только на индексах - похоже, у вас просто довольно мощный VPS. Благодаря ocStore - что-то кешируется, что-то оптимизирвоано в запросах.

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

еще кстати так и не понял что дает сжатие от 0 до 9 в настройках движка. пробовал 0 стоавить, пробовал 9. не знаю что это дает. вроде как gzip сжатие включено по умолчанию на хостере. 

vps не мощный. самый дешевый. была проблема с загрузкой товаров. на обычном хостинге 4-5 часов 24000 товаров.. на vps это 10 минут примерно .

Share this post


Link to post
Share on other sites

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

еще кстати так и не понял что дает сжатие от 0 до 9 в настройках движка. пробовал 0 стоавить, пробовал 9. не знаю что это дает. вроде как gzip сжатие включено по умолчанию на хостере. 

vps не мощный. самый дешевый. была проблема с загрузкой товаров. на обычном хостинге 4-5 часов 24000 товаров.. на vps это 10 минут примерно .

К производительности сайта - этот параметр отношения не имеет.

Это сжатие контента при отдаче с сервера до клиента.

Share this post


Link to post
Share on other sites

а поиск быстрый у вас?

Стандартный поиск. 3-4 сек.

Но я хочу поставить поиск с морфологией и ре... Модуль

Share this post


Link to post
Share on other sites

И все же, при отображении товаров по 64 шт на странице, скорость все равно могла быть и больше... Видел примеры сайтов с большим кол-вос товаром как то оптимизировали , что опенкарт летал как голый, но только как они это делают не понятно )) все равно скорость работы моего сайта не устраивает, есть какие то рекомендации, что можно в бл поковырять дабы ускорить работу ?))

Share this post


Link to post
Share on other sites

а поиск быстрый у вас?

 

а вообще существует быстрый поиск, если колличество товаров в магазине за 150 000 ?  на opencart есть модуль поиска (не помню как называется, там 2 версии, обычная и корпорейт, типа быстрый поиск на миллионе товаров) -  кто-то его пробовал?

 

или вообще есть наработки, чтобы искал точно и быстро при большом количестве товара, от 150 000 ?

Share this post


Link to post
Share on other sites
Posted (edited)
On 3/4/2013 at 11:42 PM, toporchillo said:

Обещанная статейка.

Если хотите обсуждать ее, давайте по теме - SQL.

Я понимаю, что кэширование, VPS и все такое никто не отменял, но ДО них есть не самые быстрые SQL-запросы.

Добрый вечер!

Сделал все как у вас в статье, кроме module/category.php, у меня ocStore 3, и там нет в принципе переменных product_total

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

но судя по всему не в module/category дело, так как в нем на моей версии движка нет product_total переменной вообще

 

После этого стала появляться ошибка Notice: Undefined variable: product_total in /var/www/html/storage/modification/catalog/controller/product/category.php on line 358

и пропала навигация по страницам.

ошибка уходит, если в файле catalog/controller/product/category.php

вместо getFoundProducts() использовать стандартный getTotalProducts($filter_data);

порядок был правильный, сначала getProducts, потом только getFoundProducts

 

в чем может быть причина?

 

 

 

 

и самое грустное, что запросы из getTotalProducts вида 

SELECT COUNT(DISTINCT p.product_id) AS total FROM oc_product_to_category p2c LEFT JOIN oc_product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN oc_product p ON (pf.product_id = p.product_id)   LEFT JOIN oc_filter f ON (pf.filter_id = f.filter_id) LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= '2019-08-15 17:49:00' AND p2s.store_id = '0' AND p2c.category_id = '94' AND pf.filter_id IN (76) GROUP BY p.product_id HAVING  COUNT(DISTINCT f.filter_group_id) = 1;

так и остались, хотя должны были использоваться новые, ну и как выполнялись по 0.5 сек, так и выполняются дальше по 0.5 сек

и остались они судя по всему, что вызываются под вызовом функции getCategories в файле controller/product/category.php

$results = $this->model_catalog_category->getCategories($category_id);

      foreach ($results as $result) {
        $filter_data = array(
          'filter_category_id'  => $result['category_id'],
          'filter_sub_category' => true
        );

        $data['categories'][] = array(
          'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),

это можно как-нибудь ускорить?

Edited by zfgad

Share this post


Link to post
Share on other sites
51 минуту назад, zfgad сказал:

Добрый вечер!

Сделал все как у вас в статье, кроме module/category.php, у меня ocStore 3, и там нет в принципе переменных product_total

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

но судя по всему не в module/category дело, так как в нем на моей версии движка нет product_total переменной вообще

 

После этого стала появляться ошибка Notice: Undefined variable: product_total in /var/www/html/storage/modification/catalog/controller/product/category.php on line 358

и пропала навигация по страницам.

ошибка уходит, если в файле catalog/controller/product/category.php

вместо getFoundProducts() использовать стандартный getTotalProducts($filter_data);

порядок был правильный, сначала getProducts, потом только getFoundProducts

 

в чем может быть причина?

 

 

 

 

и самое грустное, что запросы из getTotalProducts вида 


SELECT COUNT(DISTINCT p.product_id) AS total FROM oc_product_to_category p2c LEFT JOIN oc_product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN oc_product p ON (pf.product_id = p.product_id)   LEFT JOIN oc_filter f ON (pf.filter_id = f.filter_id) LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= '2019-08-15 17:49:00' AND p2s.store_id = '0' AND p2c.category_id = '94' AND pf.filter_id IN (76) GROUP BY p.product_id HAVING  COUNT(DISTINCT f.filter_group_id) = 1;

так и остались, хотя должны были использоваться новые, ну и как выполнялись по 0.5 сек, так и выполняются дальше по 0.5 сек

и остались они судя по всему, что вызываются под вызовом функции getCategories в файле controller/product/category.php


$results = $this->model_catalog_category->getCategories($category_id);

      foreach ($results as $result) {
        $filter_data = array(
          'filter_category_id'  => $result['category_id'],
          'filter_sub_category' => true
        );

        $data['categories'][] = array(
          'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),

это можно как-нибудь ускорить?

Можно, дорого!

Share this post


Link to post
Share on other sites
Just now, snastik said:

Можно, дорого!

На сколько дорого?)


Я не совсем понимаю, зачем для вывода категорий нужно проводить подсчет товаров?

Или это та стандартная переменная в движке "Считать кол-во товаров"? 
У меня эта функция отключена в настройках

Share this post


Link to post
Share on other sites
1 час назад, zfgad сказал:

На сколько дорого?)


Я не совсем понимаю, зачем для вывода категорий нужно проводить подсчет товаров?

Или это та стандартная переменная в движке "Считать кол-во товаров"? 
У меня эта функция отключена в настройках

 

Вывод категорий - это не проблема.
Проблемы начинаются там, где у вас есть 10 000 товаров и начинается пагинация.

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.


  • Similar Content

    • By fduw
      Как подключить mysql через unix socket?
      В инете не нашел рабочей инфы
       
      Стандартная конфа

       Так не работает
      define('DB_HOSTNAME', 'unix:/tmp/mysql.sock'); define('DB_HOSTNAME', 'localhost/tmp/mysql.sock'); define('DB_HOSTNAME', 'tmp/mysql.sock');  
    • By perebor
      Ребят привет, нужна помощь, прошу не пинаться) я пока не силен в оптимизации БД, но очень интересно было бы разобраться самому.
      На сервере где-то раз в месяц происходят скачки по нагрузке и кол-ву запросов. Последний был 27 числа, админка при этом пару раз отдавала 503 ошибку. Хостинг шлет предупреждения.
      Есть лог запросов, но все, что пока понимаю, так это то, что основную нагрузку подбрасывают запросы из мегафильтра. Собственно вопрос в том, что бы понять что это за запросы и как это дело оптимизировать, или может вообще стоит хостинг сменить. Буду благодарен если направите в правильное русло)

      сайт: nice-office.ru
      хостинг: ihc.ru
      Slow log:
       
       

    • By Tinyled
      Добрый день, столкнулся с задачей, выборки данных из таблицы в бд
      сама задача состоит в том что бы получить из таблицы записи сгруппированные по телефону (phone), но перед этим отсортированные по дате (datetime DESC), при этом с лимитом в 200 записей (LIMIT 0,200)
      прошу помочь понять, как можно сформировать запрос к бд, дабы не нагружать сильно бд, и выполнить все условия.
      Или может быть я ошибаюсь, и конечную сортировку лучше делать на php?
      пробовал запросом 
      SELECT sends.* FROM (SELECT * FROM `oc_watsappchat_send` WHERE creator="" ORDER BY `id` DESC) as sends GROUP BY sends.phone ORDER BY `id` DESC LIMIT 0,200 но запрос выходит достаточно долгим, и как я понимаю при увеличении числа записей в таблице время будет также увеличиваться
    • By YaroslavFrolov
      Доброго времени суток. Помогите плиз, нужно данные из корзины вставить в письмо заказа. Обработчик не от опенкарт.
    • By TerranXXX
      Необходимо модифицировать CMS ocStore v2.3 (русский OpenCart 2.1) для работы с MS SQL Server 2012+.

      Обязательные требования:
      1. Взаимодействие CMS с БД должно происходить исключительно через хранимые процедуры (доступа к таблицам у CMS не будет)
      2. Часть логики из php нужно перенести в хранимые процедуры (например динамическое формирование запросов)

      В ответе сообщите срок и стоимость данной работы.
  • 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.