Перейти к основному содержимому

Оптимизация нагрузки на базу данных

Базовая информация о работе агентов и их времени выполнения описано отдельно:

Подробное описание функций агента

В этой статье рассмотрим обмен с точки зрения нагрузки на базу данных сайта. Если говорить коротко, то везде, где есть галочка "обменивать только измененные элемент", нужно ее ставить для уменьшения нагрузки при обмене.

image_1

Теперь рассмотрим как происходит обмен в разных сценариях.

к сведению

Исходить будем из того, что в каталоге имеется 10 000 товаров.

Стандартный полный обмен данными

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

Пример:

  • чтобы пройти по всем 10 000 товарам модулю потребуется 100 шагов, каждый из которых будет забирать по 100 товаров для проверки изменений -- это касается цен и карточек товаров
  • на остатки логика немного другая, там модуль может проходить до 1000 позиций за 1 шаг

Каждый шаг модуль считывает те же товары или остатки из БД сайта и сравнивает их с данными из МС.

Общая логика при таком обмене будет примерно такая:

  • Считать 100 товаров из МС (или 1000 товаров для остатков и цен)
  • Сделать выборку считанных товаров из БД сайта на основе внешних кодов
  • Проверить данные с сайтом и внести только изменения

При такой модуль будет постоянно нагружать как API МоегоСклада, так и базу сайта лишними проверками.

Обмен только измененными данными

Если мы используем только именные данные из МС, то модуль будет раз в сутки нагружать базу полным обменом (можно выбрать время полного обмена) и далее работать только с теми элементами, которые были обновлены недавно. Механизм устроен так, что модуль не пропускает измененные данные в МС.

Такой подход не работает на:

  • агенте остатков (нет технической возможности)
  • агенте групп (нет необходимости использовать такой подход)
  • агенте скидок (нет технической возможности)

Поэтому для этих агентов критичен шаг выполнения и частота запуска.

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