История данных 1С

15.03.24

Разработка - Механизмы платформы 1С

Предварительное исследование механизма истории данных на уровне СУБД в целях организации на его основе потоковой интеграции или обработки данных в режиме реального времени.

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

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

Предварительные результаты исследования механизма истории данных 1С:Предприятие 8 свидетельствуют о том, что данный механизм может быть перспективным кандидатом для решения выше обозначенных задач.

История изменения конфигурации фиксируется для каждого объекта метаданных, для которого включено использование этого механизма. Запись версий выполняется в таблицу DataHistoryMetadata.

Изменение данных прикладных объектов захватывается и фиксируется в таблице DataHistoryQueue0. Фиксация выполняется в основной транзакции записи объекта перед самым её завершением после записи в таблицы регистрации изменений планов обмена.

Таблица DataHistoryQueue0 играет роль классической таблицы-очереди, для которой разрешено только добавление записей, что исключает возможность возникновения каких бы то ни было блокировок. Это делает её практически идеальным кандидатом для организации потоковой интеграции или обработки данных.

Следует отметить, что каждая запись объекта порождает новую версию данных в этой таблице независимо от того изменились они или нет. Однако проблему дублирования данных можно решить при помощи поля DataId, выполняя по нему группировку (сжатие потока данных).

Захваченные механизмом данные кодируются в собственном бинарном формате и сохраняются в поле Content соответствующих таблиц DataHistoryMetadata и DataHistoryQueue0. Далее приводится пример кодирования в этом формате для простого справочника "ИсторияДанных", который использовался для проведения исследования. Надо сказать, что формат кодирования вполне доступен для понимания и создания практичных алгоритмов его обработки.

 
DataHistoryMetadata(Content)