Многопоточность
Графически многопоточную загрузку данных, разделенную на блоки (сегменты), можно представить так:
Важно отметить, что сегментирование данных используется не только для того, чтобы за один раз быстро выгрузить большой массив данных, распараллелив выгрузку на несколько потоков, но и для работы инкрементальной выгрузки данных в дальнейшем. Т.е. для выгрузки только тех блоков (сегментов) данных, в которых произошли изменения.
Доступные варианты чтения таблиц
Многопоточность в Инжекторе 1С доступна в 2х вариантах чтения таблиц:
Читаем по сегментам + отмечаем в СУБД прочитанные строки
Читаем по сегменту «Дата выгрузки», запоминаем последнее прочитанное
Терминология для понимания принципа сегментирования и многопоточности
Параметры сегментирования — это набор параметров для сегментирования, например [Период]. Параметры сегментирования задаются либо в запросе, если вы сами составляли запрос, либо на этапе установки параметров при проектировании загрузки конструктором.
В текущем примере мы выбираем поле DataVigruzki для деления исходной таблицы на сегменты и добавляем в исходную СУБД колонку ReadDate для установки пометки о прочтении и загрузке (это своего рода метка обработанного сегмента). Если сегмент уже загружался, то в поле ReadDate запишется дата загрузки. А если сегмент еще не загружался, то поле ReadDate будет NULL.
Функция параметра сегментирования — это может быть любая функция. Для значений типа «Дата» можно использовать функции группировки дат по месяцам, по неделям и т.д. Для строковых типов данных (например, для наименований номенклатуры) это может быть функция, выбирающая определенный кусок этой строки (например первые N букв).
В текущем примере условие загрузки выглядит так
"SELECT DISTINCT `Nomenklatura_01122025`.`DataVygruzki` as `DataVygruzki` FROM `test_erofeeva`.`Nomenklatura_01122025` as `Nomenklatura_01122025` WHERE `Nomenklatura_01122025`.`ReadDate` IS NULL"
Сегмент — блок данных, полученный путем отбора строк из первоначального набора данных по заданному уникальному значению условия сегментирования.
При описании сегментирования всегда говорят о многопоточности, о неких параллельно выполняющихся потоках.
Поток — это программистский термин, применяемый для описания параллельно выполняющихся процессов в программе. Когда что-то делается параллельно — говорят о многопоточности. Много потоков — это много параллельно выполняющихся процессов. В данном случае, логически процесс один — идет выгрузка данных, но выполняется он сразу в нескольких потоках параллельно. Многопоточность увеличивает скорость того, что делает программа, выгружает ли она данные, или выполняет какие-то другие рабочие процессы.
Настройка многопоточности в Инжекторе 1С
На вкладке «Настройки обработчиков» можно настроить режим многопоточности загрузки сегментов.
В поле «Количество обрабатываемых сегментов» можно выбрать количество сегментов, которые будем грузить в текущую итерацию. По умолчанию оно заполнено цифрой 0. При этом значении будут загружены все подходящие под условие запроса сегменты.
В поле «Максимально количество сегментов» можно выбрать количество потоков загрузки. (Оптимально 8-10). Это то количество сегментов, которые будут загружаться одновременно.
При выгрузке данных с использованием режима многопоточности могут быть ограничения скорости, связанные с возможностями вашего сервера в плане памяти, скорости диска и т.д.
В данном разделе, по сути, был рассмотрен пример простого сегментирования, когда сегментирование производится по одному параметру «Дата». В целом, набор параметров не ограничен, Вы можете использовать и 3 и 4 параметра. Однако, чаще всего, хватает одного или двух.