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

15.03.24

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

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

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

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

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

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

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

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

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

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

 
DataHistoryMetadata(Content)
 
DataHistoryQueue0(Content)

Предварительные выводы:

1. Таблица DataHistoryQueue0 это почти идеальная таблица-очередь.

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

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

4. Историю данных можно экспортировать для анализа во внешние системы без их накопления в таблице DataHistoryVersions.

5. Предварительно кажется, что использование механизма истории данных для целей потокового обмена данными и прочей интеграции выглядит очень перспективным.

Вспомогательная информация:

1. Tag-length-value

2. Protocol Buffers data encoding to the wire

3. Версионирование объектов VS История данных

 
Как механизм истории данных 1С вычисляет по набору записей регистра сведений какие записи были удалены, обновлены или добавлены ?
 
P.S.(для самостоятельных исследований)

 

история данных интеграция обмен данными

См. также

Сервисы интеграции без Шины и интеграции

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    2799    dsdred    16    

60

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Перенос данных 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    6472    dsdred    59    

87

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    6367    YA_418728146    25    

68

Планы обмена VS История данных

Перенос данных 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    7283    dsdred    36    

114

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    19455    SeiOkami    46    

121

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    13224    human_new    27    

76

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    9742    YA_418728146    6    

146

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6685    sebekerga    54    

97
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ardn 627 14.08.23 12:12 Сейчас в теме
Не понятно, в чем именно выигрыш истории данных по сравнению с регистром сведений?
3. zhichkin 1456 14.08.23 13:10 Сейчас в теме
(1) Я так думаю, что в производительности сериализации данных объектов. Обычно в регистры сведений сериализуют объект в формате JSON. Бинарная сериализация истории данных, судя по всему, гораздо компактнее и быстрее будет.

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

Кроме этого работа с регистром сведений выполняется через объекты типа "НаборЗаписей", а, следовательно, через виртуальную машину выполнения байт-кода 1С, что тоже само по себе не супер оптимально, по крайней мере в сравнении с платформенной сериализацией на C++.

Нужны конечно же замеры и прочие доказательства в объективной форме. Не делал, пока что всё на уровне интуиции и собственного практического опыта реализации аналогичных решений ¯\_(ツ)_/¯
5. KilloN 58 14.08.23 16:51 Сейчас в теме
(1)
Выигрыш колоссальный, во первых история данных хранит только изменения, отсюда размеры таблицы меньше в разы, во вторых можно накладывать отборы при поиске.
У меня значительная часть механизмов на этом построена.
Письма партнерам об изменениях в заказах уже 3 года формируются автоматом.
Обмен в разы уменьшился за счет регистрации только нужных изменений, которые в свою очередь построены на истории данных
JohnyDeath; dsdred; ardn; +3 Ответить
7. ardn 627 14.08.23 16:57 Сейчас в теме
(5)
(5)
изменениях в заказах уже 3 года формируются автоматом.
Обмен в разы уменьшился за счет регистрации только нужных изменений, которые в свою очередь построены на истории данных


Про регистрацию интересно. Поделитесь подробностями? А как поступаете, если все-таки нужно принудительно зарегистрировать что-то?
RealSurfer; +1 Ответить
12. KilloN 58 21.09.23 12:22 Сейчас в теме
(7)
. Поделитесь подробностями? А как поступаете, если все-таки нужно принудительно зарегистрировать что-то?


Все просто по истории данных я учитываю что изменено через обработку после записи истории.
Если нужно продублировать что либо, то всегда есть кнопка отправить все заново.
Но я ей минимум год уже не пользуюсь
8. dsdred 3335 15.08.23 12:35 Сейчас в теме
(1)
На вскидку:
1 История данных может хранить историю изменений регистра сведений ))
2 История данных платформенный механизм
2. ardn 627 14.08.23 12:13 Сейчас в теме
Таблица DataHistoryQueue0 играет роль классической таблицы-очереди, для которой разрешено только добавление записей...
А как же перенос данных из этой таблицы в саму DataHistoryVersions? Удаление все-таки есть.
4. zhichkin 1456 14.08.23 13:19 Сейчас в теме
(2) Удаление из таблицы-очереди рано или поздно всегда есть =) Имеется ввиду использование таблиц СУБД в качестве очередей, без UPDATE. Кроме этого в данной статье я не рассматриваю перемещение истории из таблицы DataHistoryQueue0 в таблицу DataHistoryVersions. Считаю эту манипуляцую на высоко нагруженных базах лишней - историю лучше выносить во внешние базы.
6. KilloN 58 14.08.23 16:52 Сейчас в теме
Одна из лучших нововведений, которая сделала 1С в свое время.
Передовая фича, используемая от слова везде
JohnyDeath; dsdred; +2 Ответить
9. dsdred 3335 15.08.23 12:39 Сейчас в теме
(6)И, что печально, мало кто ее использует.
10. TMV 14 15.08.23 20:24 Сейчас в теме
С таким оформлением плохо читается статья.
RealSurfer; +1 Ответить
11. zhichkin 1456 16.08.23 13:31 Сейчас в теме
(10) Здесь как-то сложно таблицы редактируются - не осилил. Есть версия в pdf на канале DaJet в Телеграм.
Оставьте свое сообщение