Поддерживать актуальность данных. Инкрементальная выгрузка данных.
О чем речь?
В данной статье мы расскажем вам о возможности, которая реализована в «Экстракторе 1С» и благодаря которой выгрузка данных становится еще более производительной и эффективной.
Речь идет об использовании инкрементальной (по частям) выгрузки данных. О возможности по расписанию выгружать только те части набора данных, в которых произошли изменения.
Представьте себе ситуацию, когда у вас настроена выгрузка большого массива данных за большой период времени, и вдруг возникает необходимость внести изменения в какой-то 1 документ, влияющий на данные вашего набора данных. Не выгружать же все?! Нет, конечно нет! После того, как вы настроили расписание выгрузки данных проекта, автоматически включается режим отслеживания изменений этих данных. При внесении любых изменений в набор данных посредством редактирования документов, справочников и т.д, если эти изменения меняют данные вашего набора данных - сразу происходит добавление в очередь выгрузки новой строки, в которой указывается, что надо выгрузить такой-то сегмент данных, т.е. тот сегмент, в которую входят измененные данные.
Все происходит автоматически по тому расписанию, которое вы сами настроили, вам не нужно за этим следить.
Все сегменты, в которых произошли какие-то изменения, попадают в очередь и копятся там до тех пор, пока не наступит по расписанию момент очередной выгрузки - и выгружаются.
Видео
Весь процесс в виде диаграммы
Коротко о сегментировании
В основу принципа инкрементальной выгрузки заложено понятие сегментирования данных. Для того, чтобы понять как работает инкрементальная выгрузка, нам с вами необходимо разобраться, как работает сегментирование данных. Без настройки сегментирования выгрузки невозможно и включение режима инкрементальной выгрузки.
Инкрементальная - означает выгрузка по частям только тех данных, которые изменились.
Выгрузка данных из 1С одним общим массивом данных - это вообще очень ресурсоемкий, длительный процесс, особенно если это действительно большой массив данных. Для ускорения этого процесса в «Экстракторе 1С» используется механизм сегментирования данных, т.е. деления их на блоки(сегменты) для распараллеливания первоначальной выгрузки . Каждый блок (сегмент) выгружается при этом в отдельном фоновом задании, что сильно уменьшает время выгрузки. Затем это же разбиение данных на сегменты используется уже в механизме инкрементальной выгрузки.
Для полного понимания, как работает сегментирование рекомендуем вам ознакомиться со статьей:
Сегментирование, что такое, для чего нужно, как это работает?
Если вы прочли эту статью - то теперь вы имеете представление о сегментировании, блоках (сегментах) данных.
Перейдем к настройкам проекта, которые обеспечат инкрементальную выгрузку данных, на основании настроенных вами параметров сегментирования для выгружаемой таблицы.
Настройка строки проекта для инкрементальной выгрузки данных (т.е. только измененных данных)
В видео был рассмотрен пример инкрементальной выгрузки справочника Номенклатура. Для разнообразия в текстовом описании мы рассмотрим пример инкрементальной выгрузки регистра накопления с сегментированием по месяцам.
Рассмотрим на нашем примере выгрузки оборотов регистра накопления «Выручка и себестоимость продаж».
После того, как вы настроите выгрузку данных, в том числе настроите параметры сегментирования так, чтобы они разбивались по месяцам например (см. Этап 3 инструкции по созданию проекта) и нажмете “Сформировать/обновить” в процессе проектирования (на Этапе 8 инструкции по созданию проекта) - у каждой строки проекта автоматически появится обработчик:
Обработчик формирования очереди выгрузки при изменении объектов. См. Рисунок 1 .
Эти настройки можно увидеть, выбрав строку проекта и нажав на шестеренку над табличной частью:
По большому счету теперь все настроено и если напротив обработчика стоит галка - значит он активен и работает. А значит все изменения в документах этого типа будут регистрировать изменения в очередь выгрузки. Выгрузка данных будет происходить по настроенному вами расписанию.
Что дальше?
Все изменения в документах-регистраторах, влияющих на данные, выгружаемые проектом, автоматически добавляют записи в очередь выгрузки. Это производится с помощью существующего в 1С механизма подписок на события.
Что, если сейчас мы найдем документ, который делает записи в этот регистр накопления и внесем в нем какие-то изменения, что произойдет? Например, поменяем в документе дату так, чтобы документ из одного сегмента перешел в другой. В нашем примере надо поменять дату на дату другого месяца. Перепроведем документ, чтобы записи в регистре перезаписались, после чего в очереди к выгрузке сразу появится строка, о том,что надо выгрузить данные :
того сегмента, к которому записи этого документа относились до изменений (допустим это был документ за Январь 2024 - значит к выгрузке в очередь данных добавится сегмент «202301» - это формат представления конкретного месяца)
а также того сегмента, в котором эти данные должны числиться после изменений (допустим мы изменили дату на февраль 2023 -. значит к выгрузке в очередь данных добавится сегмент «202301» - это формат представления конкретного месяца)
Чтобы открыть очередь выгрузки - нажмите на кнопку:
См. рисунок (что зарегистрировалось в очередь выгрузки):
Если бы мы поменяли данные так, что изменился бы только один сегмент, т.е. мы поменяли бы какой-то параметр, не являющийся частью ключа сегментирования, что было бы тогда?
Например, мы поменяли бы Контрагента - тогда в очередь выгрузки попала бы только одна строка, т.к. сегмент данных, к которому относятся данные этого документа-регистратора, не изменился.
Когда же данные будут выгружены?
Все изменения копятся в очереди выгрузки до того момента, когда сработает событие выгрузки данных по расписанию. И только тогда все накопленные в очереди сегменты данных выгружаются в базу данных.
Расписание выгрузки настраиваете вы сами (каждый день, каждый час и т.д.). Настройка расписания выгрузки производится в окне проекта в разделе «Расписание». Обратите внимание, что галка «Активно» должна быть проставлена, чтобы расписание работало. См. также: Подробная инструкция по настройке расписания.
Что именно происходит при этом в таблице базы данных?
В случае стандартной выгрузки данных, настроенной с помощью мастера-помощника (конструктора), автоматически проставляется настройка «Способ обновления» в значение «Обновление сегмента». Это означает, что при выгрузке ранее выгруженного сегмента заново - старые записи данного сегмента будут удалены, а новые добавлены. Именно это и произойдет, как только сработает событие выгрузки по расписанию. Для инкрементальной выгрузки данных этот параметр надо оставить неизменным, тогда все новые выгружаемые блоки(сегменты) данных будут заменять собой старые и таким образом будет обеспечено поддержание выгруженных данных в актуальном состоянии.
т.е. для нашего конкретного примера, для каждого сегмента из очереди выгрузки:
В таблице базы данных будет удален блок данных, соответствующий этому сегменту (например «202302»), вместо него будет запрошен из базы 1С и добавлен в таблицу новый набор данных, соответствующий данному сегменту (т.е. все обороты за февраль 2023).
....и так далее для каждого уникального сегмента в очереди.
Для каждого сегмента будет создано свое фоновое задание и выгрузка различных сегментов будет выполняться параллельно в нескольких потоках.
Таким образом, инкрементальная выгрузка данных настраивается полностью автоматически. Вам нужно лишь иметь представление, какие настройки за это отвечают и не забывать, что обработчик активен только тогда, когда напротив него стоит галка. Если галку убрать - то отслеживание и регистрация изменений будут прекращены (см. Рисунок 1).