Как стать автором
Обновить

Интеграционные решения на примере продукта «Цифровая карта магазина»

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров489

Всем привет!
Меня зовут Алексей, я старший аналитик команды «Цифровая карта магазина». Сегодня я хочу рассказать про различные варианты интеграции с внешними системами, какие подходы и технологии мы использовали при их реализации и что из этого вышло.

О продукте «Цифровая карта магазина»

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

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

Смежные системы и виды интеграций

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

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

На слайде выделена зелеными рамками система «Поставщики», интеграция с которой происходит в рамках ETL-процесса.

Расскажу немного подробнее про то, что же такое ETL-процесс. 

ETL-процесс: определение и особенности

ETL – это аббревиатура от Extract, Transform and Load, обозначающая совокупность процессов, которые выполняют извлечение данных из внешних источников, например, объекты базы данных или файлов, преобразование и очистка данных согласно бизнес-потребностям, загрузка обработанной информации в базу данных. Прикладное назначение ETL состоит в том, чтобы организовать определенную структуру и набор данных с помощью интеграции различных информационных систем. 

Если говорить об особенностях этого процесса, извлечение данных может быть как полным, так и частичным, или инкрементальным. Частичное извлечение может поддерживаться благодаря системе-поставщику данных, которая может указать, какие записи были добавлены, изменены либо удалены в тех или иных источниках. Например, в системе управления мастер-данными существует возможность добавления вашей системы в качестве подписчика на инкремент, а с помощью определенной функции можно получить только те строки, которые были изменены с момента прошлой итерации извлечения данных. 

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

  • очистка данных. Задача этого преобразования создать более полезный набор данных, готовый к использованию в целевой базе данных. Например, удаление дубликатов, замена или удаление нулевых значений, поиск и исправление ошибок; 

  • разделение. Помогает разделить данные, чтобы облегчить с ними дальнейшую работу. Например, преобразование адреса клиента в три поля: улица, номер дома, квартира;

  • извлечение. Позволяет достать отдельную информацию из поля данных, например, месяц заказа из формата месяц, день и год; 

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

Для этапа загрузки тоже можно выделить определенные особенности: 

  • полное обновление посредством удаления содержимого таблицы и заполнения ее свежим набором данных;

  • инкрементальная загрузка, подразумевающая обработку на интеграционном слое вашей базы данных, наличие новых записей и изменения в существующем. В случае обнаружения новых записей будет происходить добавление, а в случае совпадения – обновление. 

Если говорить о применимости этих особенностей процесса, то я бы советовал использовать по возможности инкрементальное извлечение и загрузку данных. Например, для справочников, которые вы дублируете у себя в системе, либо данных, которые появляются в источнике с определенной периодичностью. В случае Цифровой карты это, к примеру, данные по кластерам «Категории», которые рассчитываются на будущий сезон. 

Полное обновление можно использовать в случае отсутствия зависимости в конечных таблицах и в целях экономии времени на разработку интеграции. Но при этом нужно понимать, что при большом объеме извлекаемых данных будет тратиться больше ресурсов на преобразование и загрузку. 

Рассказав немного об особенностях этапов процесса, я бы хотел перейти к практике применения данного процесса в рамках разных технологий систем-поставщиков, с которыми интегрируется Цифровая карта.

Интеграция Oracle -> Oracle

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

Далее по dblink подключаемся к этому представлению и извлекаем из него данные. 

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

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

Интеграция MS SQL -> Oracle

Однако не все системы в нашей компании имеют в распоряжении Oracle базу данных. Например, одной из таких систем, с которой мы интегрируемся, является Агеа Planning Management,  или система планирования площадей. 

В данном случае решением (в том числе рекомендованным Департаментом систем клиент-сервер) было использовать веб-сервис, т.к. вариант dblink из Oracle в NSSQL не гарантировал стабильную и оптимизированную работу. 

В нашем случае это сервис, который вызывается по расписанию, выполняет запрос к поставщику данных, а после извлечения преобразовывает это в числовой формат и отдает в хранимую процедуру на интеграционном контуре.

Real-time интеграция

Помимо интеграции через ETL-процесс в некоторых функциях системы мы используем real-time интеграции. 

Например, для первых трех пунктов на картинке слева мы используем RESTful API. А вот для получения текущих остатков мы обращаемся уже напрямую к представлению, которое расположено на сервере системы сбора и хранения операций магазина, и используем это хранилище в качестве источника данных при работе системы.

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

Ручная интеграция

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

И ещё немного о способах загрузки

Поделюсь еще одним способом загрузки. В случае, если у вас есть данные в табличном виде, с помощью Excel вы добавляете столбец и простой формулой генерируете Insert-запросы в нужную вам таблицу. Либо вы можете сохранить этот Excel в виде плоского файла с разделителем и воспользоваться инструментом Text Importer в PL/SQL Developer. Этот инструмент позволяет загрузить данные из вашего файла в таблицу и в случае необходимости может предварительно ее очистить. При этом он не строг к расположению столбцов в файле и позволяет преобразовывать данные перед загрузкой. Он также умеет избавляться от дублей, но, по моему личному опыту, может переусердствовать, поэтому лучше загружать файл, предварительно выбрав пункт Ignore Duplicates. 

Подводя итоги

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

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

Теги:
Хабы:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Публикации

Информация

Сайт
см-лаб.рф
Дата регистрации
Дата основания
Численность
1 001–5 000 человек
Местоположение
Россия
Представитель
Алина Айсина