|
Professor Seleznov
|
Продолжаем серию публикаций «Адаптивное администрирование Sigla Vision». Часть наших подходов будет полезна и другим ИТ-специалистам, которые развивают или сопровождают аналитические системы — особенно те, что хранят метаданные во внешних СУБД. В этой статье подробно разберем объектную модель BI-системы. Она помогает лучше понимать работу системы, следить за ее состоянием и контролировать изменения. Впредыдущей статье «Адаптивное администрирование Sigla Vision» мы посмотрели на BI-систему «из коробки» глазами тех, кто ее сопровождает: объяснили, зачем нужны дополнительные данные о работе системы и для чего создавать объектную модель, привели примеры задач, где она используется. Тема нынешней статьи — основа всего нашего дальнейшего опыта работы с Sigla Vision. Основной подход к построению модели Объектная модель Sigla Vision (далее — ОМ) описывает объекты системы, их текущее состояние, историю изменений и связи между собой. Если метаданные объектов система хранит во внешней СУБД, а логи работы ПО доступны, эти данные можно объединить — и получить картину состояния системы и происходящих в ней процессов. В Sigla Vision такая информация доступна, и мы этим воспользовались.

Рис. 1. Процесс построения модели Схемы объектной модели Чтобы наглядно показать, как работает система, выделим отдельные функциональные блоки. Мы используем два подхода к схематическому представлению объектной модели Sigla Vision. Объектная схема — состоит из логических блоков объектов системы с определенным функциональным назначением. Например, дашборды или датасеты. Табличная схема — это совокупность таблиц с промежуточными и конечными данными ОМ, плюс функции, которые управляют обновлением этих таблиц. Например, таблица дашбордов в «Коллекции» собирается из таблицы иерархии каталогов «Коллекции» и таблицы шаблонов дашбордов из рабочих книг пользователей. Отдельный тип таблиц — интегральные представления данных и подготовленные витрины системных дашбордов, связанные напрямую с мониторингом работы системы. Табличная схема во многом схожа с объектной, но одному объекту на объектной схеме здесь может соответствовать несколько таблиц. Схему БД для размещения таблиц ОМ при развертывании решения каждый выбирает сам. Мы реализовали ОМ в нашей основной схеме установки БД FineDB. В универсальном коде развертывания мы изменили схему на стандартную Public. ОМ не вносит изменений в исходные таблицы и работает только со своими объектами, которые сама и создает. На скорость работы Sigla Vision это практически не влияет. Но таблицы ОМ могут занимать в БД заметное место — мы денормализуем данные, чтобы их было проще использовать. Поэтому важно следить за динамикой роста объема данных в БД, отведенной под ОМ. Для удобства администраторов все объекты ОМ начинаются с трехбуквенного префикса, где первая буква — «z». При сортировке по имени все таблицы ОМ и системных дашбордов (если они созданы в схеме БД FineDB) оказываются ниже основных таблиц FineDB. На этапе прототипирования мы условно разделили таблицы на категории по префиксам названий:
- z00 — вспомогательные таблицы для системы, не относящиеся к ОМ;
- z01 — первичные таблицы ОМ (данные, полученные из основных таблиц FineDB);
- z10 — вспомогательные таблицы для ОМ (данные с ручными загрузками: списки, связи, справочники);
- z11 — таблицы ОМ верхнего уровня, собираемые из таблиц групп «z01» и «z10». Они дают наиболее полное представление о нескольких объектах со свойствами и связями между ними. Например, таблица дашбордов в «Коллекции» объединяет таблицу иерархии коллекции и таблицу шаблонов отчетов;
- zsd — таблицы для системных отчетов и дашбордов (от «system dashboards»).
Позже для части таблиц мы добавили еще один способ обозначения верхнего уровня — постфикс allпри префиксеz01. Главный принцип разработки и доработки системной отчетности — максимально формализовать структуру таблиц самого верхнего уровня, опираясь на таблицы системы и таблицы модели других уровней. Структурная схема объектной модели Эту схему мы уже разбирали впервой статье цикла и давали пояснения тезисами, поэтому повторяться не будем. Объектов и связей между ними много. Построить логически стройную модель, которая отражает состояние объектов системы, — важная часть настройки адаптивного администрирования. В дальнейшем такая модель сильно упрощает понимание работы системы.

Рис. 2. Структурная схема объектной модели Табличная схема объектной модели Визуализированная табличная схема могла бы быть удобной для работы, но при сборке итоговых таблиц возникает множество промежуточных, и разобраться в их назначении и связях непросто. Мы строили ОМ «снизу вверх», отталкиваясь от тех данных, что нашли в таблицах FineDB и LogDB. В табличной схеме названия таблиц можно заменить названиями функций, которые их наполняют. Эти функции выполняются последовательно при обновлении ОМ и задают порядок расчета. Часть схемы показана на рис. 3.

Рис. 3. Схема вызова функций объектной модели Эта схема и в таком виде воспринимается с трудом. Здесь не указаны таблицы и их поля с описаниями, которые прояснили бы функциональное назначение. Не приведен и полный перечень таблиц, задействованных внутри функций — особенно когда одна функция формирует сразу несколько таблиц. Гораздо удобнее описывать табличную структуру ОМ в виде плоской таблицы. Такая таблица легко группируется, фильтруется и просматривается. И главное — ее можно собрать автоматически: серией SQL-запросов к структуре объектов СУБД (представлений, таблиц, функций) получить названия, описания и свойства. Извлечение данных о таблицах и функциях прямо из СУБД решает заодно и проблему актуальности табличного представления ОМ. Состав функций и таблиц, порядок вызова функций, состав полей — все это меняется. Поэтому данные о таблицах и функциях (наличие таблицы или функции и их описания) проще извлекать прямо из СУБД, а информацию о последовательности выполнения функций — из формируемого лога. Поддерживать актуальную схему объектов приходится регулярно, поэтому мы автоматизировали описание объектов модели, перечень их свойств и связей между ними. Создали несколько представлений, которые по запросу к FineDB выводят структуру ОМ. Основное — вью v_zom. Состав полей представления v_zom
| # |
Название |
Комментарий |
| 1 |
group_desc |
Описание группы таблиц |
| 2 |
group_table |
Префикс группы таблиц |
| 3 |
table_cat |
Категория таблицы: 01, 11 |
| 4 |
function_name |
Функция расчета и обновления данных в таблицах |
| 5 |
table_schema |
Схема таблицы |
| 6 |
table_name |
Название таблицы |
| 7 |
table_desc |
Описание таблицы |
| 8 |
pos_num |
Номер столбца |
| 9 |
column_origin |
Происхождение столбца на основе префикса в описании поля |
| 10 |
column_name |
Название столбца |
| 11 |
column_desc |
Описание столбца |
| 12 |
data_type_group |
Группа типа данных в столбце |
| 13 |
data_type |
Тип данных в столбце |
| 14 |
has_zfr |
Признак 1/0 наличия одноименной функции расчета таблицы |
| 15 |
has_ds_in_sv |
Признак 1/0 загрузки датасета в Sigla Vision |
| 16 |
has_table_desc |
Признак 1/0 наличия описания таблицы |
| 17 |
has_column_desc |
Признак 1/0 наличия описания колонки |
| 18 |
col_state_dev |
Числовой статус таблицы из описания |
| 19 |
col_state_dev_t |
Текстовый статус таблицы из описания |
| 20 |
table_state_dev |
Числовой статус поля из описания |
| 21 |
table_state_dev_t |
Текстовый статус поля из описания |
В итоге получили быстро обновляемую таблицу с актуальной информацией о таблицах ОМ и связанных с ними функциях с описаниями. Эта информация дальше используется в системном дашборде, где виден статус описания таблиц и полей (описан, коррекция, дубликат, тест):

Рис. 4. Пример части дашборда о состоянии описания ОМ Описания полей в первой сводной таблице на скриншоте:
- Ф — функция;
- T-S — таблица загружена в Sigla Vision как датасет;
- T — таблица;
- П — поле таблицы;
- TO — таблица имеет описание;
- ПО — поле таблицы имеет описание;
- ТО, % — процент таблиц с описанием от общего количества таблиц;
- ПО, % — процент полей с описанием от общего количества полей таблиц.
На скриншоте видно: в составе нашей реализации ОМ сейчас — 67 таблиц с 652 полями. Подробнее про функционал автоописания ОМ — ниже, в разделе «Автоописание модели». Взаимодействие системы с БД FineDB и LogDB Метаданные BI-системы постоянно меняются. В этом процессе можно условно выделить субъекты и объекты. Субъекты Субъекты взаимодействуют с объектами системы (сущностями), изменяя их. Если действие логируется, оно попадает в лог событий. В модели выделяем два субъекта:
Пользователь — это учетная запись (УЗ) уровня приложения с правами на действия с определенными объектами. Права назначаются индивидуально или через групповые роли в интерфейсе ПО. Например, пользователь с УЗ администратора через интерфейс ПО назначает права на дашборд конкретной роли, к которой относятся несколько УЗ. Система может менять объекты напрямую, в том числе вне видимых настроек в интерфейсе ПО. Но логируются только заранее предопределенные события, поэтому часть изменений объектов на уровне системы остается невидимой. Например, изменения в SQL-коде датасета система нигде не фиксирует. Здесь выручает система версионирования изменений в рамках подхода адаптивного администрирования — с ее помощью такие изменения можно учитывать. Объекты Перечень объектов в модели может расти или сокращаться. Новые объекты требуют выполнения доработок ОМ для качественной интеграции в общую модель данных. А удаление из FineDB таблиц, уже используемых в ОМ, ломает существующие процессы получения информации об объектах. Так уже было при переходе с FineBI 5 на FineBI 6: часть данных пропала из таблиц FineDB, а от поддержки части прежних таблиц вендор отказался. Объекты (сущности) Ролевые:
- пользователи;
- групповые роли пользователей (департамент, позиция, роль);
- разрешения УЗ пользователей и ролей на объекты.
Контентные:
- публикация в коллекции на портале;
- отчет FineReport;
- дашборд (шаблон);
- рабочая книга;
- компонент дашборда;
- датасеты: базовый и ETL.
Логи:
- события обновлений SPIDER;
- логируемые события с объектами системы LogDB.
Сервисные:
- подключение;
- расписание обновления датасетов (SPIDER и DIRECT);
- ключевые параметры системы.
Получение данных из репозитория Варианты хранения данных в FineDB Простое хранение — объект и его свойство лежат в разных полях одной таблицы. Сложное хранение:
- объект хранится как JSON, и его элементы нужно дополнительно обрабатывать;
- объект хранится как JSON в закодированном виде, и его сначала надо декодировать;
- состав группы элементов задан в одной строке (различные списки);
- информация лежит в LogDB и должна синхронизироваться по времени с данными FineDB.
Самый сложный случай получения данных — соединение данных LogDB и FineDB. LogDB способен ссылаться на данные FineDB, которые могут быть уже удалены: FineDB хранит в основном таблицы текущего состояния системы, без сохранения промежуточных. Историю изменений из стандартных таблиц FineDB восстановить невозможно. Эту задачу мы решили только дополнительным функционалом версионирования таблиц FineDB на уровне БД. После обработки данные об объекте и его свойствах размещаются в одной записи. Отдельно формируем таблицы связей между объектами. Есть и проблема диалекта конкретной СУБД — отличия синтаксиса команд и уникальные функции обработки данных (например, поддержка извлечения JSON). Мы реализовали решение на PostgreSQL, поэтому часть кода без серьезной адаптации не подойдет для других СУБД (Microsoft SQL Server, MySQL или Oracle). Получение данных из логов Чтобы получить доступ к информации из LogDB на уровне FineDB, понадобится настроить удаленное подключение через плагин postgres_fdw.
--#1 Создание удаленного сервера CREATE SERVER server_finedb FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'logdb', host 'server-finedb', port '5432'); --#2 Привязка УЗ для авторизации на сервере CREATE USER MAPPING FOR acc_finedb SERVER server_finedb OPTIONS (USER 'acc_logdb', password 'pwd'); --#3 Выдача прав на использование таблиц logdb из-под УЗ другого пользователя GRANT USAGE ON FOREIGN SERVER server_finedb TO acc_finedb; --#4 Создание схемы в БД FineDB для импорта CREATE SCHEMA logdb_log; --#5 Импорт данных в схему IMPORT FOREIGN SCHEMA logdb_log --LIMIT TO (fine_record_execute) --для выбора конкретных таблиц FROM SERVER server_finedb INTO logdb_log;
Концепция функциональных модулей расчета Данные модели формируются по модульному принципу — и при разработке, и при обновлении. Каждый модуль выполняет расчет или группу расчетов для сущностей системы и ее параметров. Результаты помещаются в таблицы ОМ внутри БД. Модули поддерживают и полное обновление данных в таблицах, и инкрементальное — для больших и сложных расчетов. Из модулей затем собираются более крупные конструкции связанных элементов системы — определенная последовательность вызовов. Например, полная цепочка от опубликованного дашборда до базовых датасетов с подключениями. На полученных данных строятся системные дашборды, которые показывают состояние системы и в статике (срез на дату), и в динамике (изменения во времени). Мастер-функция обновления объектной модели Все модули расчета можно запускать двумя способами — последовательно или независимо. Мы используем оба. Раз в сутки планово обновляем всю ОМ и таблицы системных дашбордов. В течение дня для части таблиц точечно делаем повторные вычисления отдельных функциональных блоков. Например, дважды в час запускаем функцию расчета данных о датасетах и их обновлениях. При последовательном подходе задается одна правильная последовательность вычислений: к моменту запуска каждого модуля все нужные ему данные уже посчитаны. Плюсы: высокая консистентность данных расчетов. Минусы: каждый раз приходится пересчитывать все модули, итоговое время вычисления растет. При независимом подходе порядок вызова модулей произвольный. Скажем, если часть данных нужно пересчитывать не раз в сутки, а каждые 30 минут. При последовательном подходе расчет запускается через мастер-функцию — последовательность вызовов других функций, объединенных в блоки по разным признакам. Например, блок датасетов, блок рабочих книг и контента в них. Допустим, таблица плана выполнения мастер-функции содержит блоки обновления данных:
- объектной модели;
- дополнительных расширений;
- системных дашбордов.
Дополнительные расширения — это более крупные форматы представления данных о работе системы. В системных дашбордах они напрямую не используются, но связывают между собой несколько сущностей для отдельных задач. Например, данные о просмотрах отчетов пользователями — это объединение логов действий пользователей и используемого контента. Можно обновить только ОМ или только системные дашборды. Логирование сборки объектной модели Ход выполнения мастер-функции и вызываемых функций логируется. Это позволяет мониторить процесс обновления на предмет ошибок и времени выполнения как отдельных функций, так и всего расчета. В логе у каждого модуля две записи: старт и завершение (с ошибкой или без). У каждого запуска мастер-функции и модуля расчета свой уникальный идентификатор ID формата «ггггММддччммсс». Если модуль запускается из мастер-функции, у всех модулей этого запуска будет общий ID мастер-функции. Так можно отследить, какие расчеты выполнялись в каждой сессии. Данные лога позволяют отвечать и на другие вопросы: когда функция выполнялась впервые (в том числе на этапе разработки и отладки), когда ее исключили из расчета, на каком этапе мастер-функции она вызывается в текущей сборке ОМ. Автоматизированное обновление объектной модели Обновление данных ОМ можно реализовать несколькими способами. По способу вызова:
- через мастер-функцию с последовательным вызовом всех модулей расчета;
- через последовательные прямые вызовы модулей.
По месту вызова:
- из ПО Sigla Vision;
- из другого ПО.
Из интерфейса обновления датасетов Sigla Vision мастер-функцию можно запустить, создав обычный датасет с результатом ее выполнения. Но предпочтительнее запускать всю мастер-функцию или только отдельные ее части через внешнюю систему — оркестратор процессов вроде Apache Airflow или планировщики задач PostgreSQL / Linux. Так появляется возможность строить более гибкие сценарии расчета. Например, продолжать сборку с момента последней ошибки. Особенности валидации данных Объектная модель должна быть максимально близка к реальной системе в штатном режиме работы. Перед практическим использованием всегда нужно проверять, насколько модель ей соответствует. Наша ОМ достаточно качественная: при разработке мы провели валидацию ее данных. Все элементы ОМ нужно проверить:
- по числу элементов;
- по числу связей;
- по характеру связей;
- по количеству свойств элементов.
Общий план валидации: сравнить данные в пользовательском интерфейсе Sigla Vision и данные модели с учетом имеющихся иерархий. Варианты сравнений с учетом иерархии объектов (каталоги и находящиеся в них датасеты):
- точечное — отдельные наиболее удаленные в иерархии объекты или объекты с максимальным числом заданных свойств;
- групповое — сравнение числа элементов в отдельных узлах иерархии или по функциональным группам;
- полное верхнеуровневое — сравнение общего числа элементов без детализации.
Если данные модели расходятся с реальной системой, оцениваем степень расхождения. По величине расхождения делаем вывод о применимости ОМ:
- данные полностью совпадают;
- данные практически полностью совпадают и подходят для использования с высокой степенью достоверности;
- данные существенно отличаются от реальной системы и непригодны для применения.
В нашей системе большая часть объектов отражена в ОМ достаточно точно. Количество элементов в интерфейсе и в таблицах БД совпадает на 100% для элементов «Коллекции», дашбордов, компонентов дашбордов, датасетов, рабочих книг, подключений, пользователей и ролей. При этом часть данных не всегда связана между собой — из-за длительности расчета. Пока он идет, в уже обработанных таблицах могут появляться изменения. Но этой погрешностью можно пренебречь: расхождения исчисляются единицами или десятками объектов на сотни и тысячи. Автоописание модели Любую модель системы нужно описать в форме, достаточной для ее сопровождения. У табличного представления модели связи сложнее, а список элементов (таблиц) заметно больше, чем у объектной. Поэтому собрать актуальный список используемых в ОМ таблиц и функций — отдельная задача, которая должна обеспечивать максимальное соответствие текущему состоянию ОМ. ОМ не статична. От версии к версии базового ПО Sigla Vision в структуре FineDB случаются как небольшие, так и крупные изменения: добавляются и убираются целые таблицы или отдельные поля в них. Одни изменения могут негативно повлиять на уже работающую структуру ОМ. Например, вендор отказывается от поддержки части таблиц, удаляет фрагмент функционала или меняет подход к хранению данных. Другие изменения связаны с появлением новых объектов модели в новом функционале ПО — при этом на существующую модель они не влияют. Однако при появлении в FineDB новых полей и таблиц всегда стоит оценивать, насколько эти данные полезны, и при необходимости дорабатывать ОМ. Чтобы упростить ведение сопроводительной документации к ОМ на базе FineDB, мы используем следующий подход:
- комментируем в полях описания таблицы, состав полей, функции и их параметры;
- придерживаемся фиксированного нейминга для функций, таблиц и их полей;
- ведем унифицированный лог выполнения функций;
- по данным лога восстанавливаем историю расчетов: первое появление функции, статус выполнения, среднее время выполнения;
- ведем описание текущей структуры ОМ в формате представлений БД с удобной категоризацией и сопоставлением таблиц и функций между собой.
В FineDB мы подготовили несколько представлений (с префиксом v_zom в названиях) и таблиц-справочников. На их основе строится актуальный список таблиц объектной модели — с перечнем полей и связанных функций, с комментариями о назначении и данными об истории выполнения функций (первое появление, последний запуск). В итоге у нас практически всегда есть актуальное описание системы, а на сопровождение решения уходит заметно меньше усилий. Для наглядности сопровождения ОМ удобно объединять таблицы в более крупные группы — например, группы таблиц с данными дашбордов или датасетов. Группы можно назначать автоматически на основе префиксов таблиц либо вручную, индивидуально. За соответствия отвечает отдельная таблица-словарь в структуре ОМ. Для удобства оценки состояния описания ОМ мы определили дополнительные правила, позволяющие на основании описаний таблиц и их полей в БД автоматически получать данные о статусе описания системы в целом. При этом сама разметка осуществляется однократно — администратором вручную. Системные дашборды Системные дашборды содержат данные для ответов на ключевые вопросы сопровождения системы:
- количество сущностей системы и динамика их изменения;
- логи действий УЗ с контентом;
- права ролей на объекты системы;
- УЗ и ролевые группы.
Системные дашборды лучше размещать внутри Sigla Vision — это дает возможности расширенного анализа. Подключение можно делать в режиме Extract или Direct в зависимости от задач. Direct хорошо подходит для отчетов с малыми объемами и минимумом вычислений. Большие датасеты и сложные вычисления — Extract. Примеры системных дашбордов Для лучшего контроля за работой системы по данным об изменениях объектов мы разработали несколько групп интерактивных дашбордов. Часть дашбордов — это, по сути, сводные отчеты с возможностью срезов и группировок. Другие — не только сводные отчеты, но и справочники, панели мониторинга состояния системы. Выделим несколько групп для примера. Группа дашбордов на данных FineDB и LogDB:
- просмотры контента «Коллекции» пользователями;
- действия пользователей с контентом (в «Коллекции» и «Песочнице»).
Группа дашбордов на данных FineDB:
- перечень ролей в системе и состав их участников;
- данные о составе песочниц: рабочие книги с содержимым, с учетом иерархии отнесения на подразделение УЗ пользователя;
- публикации дашбордов в «Коллекции»;
- информация о пользователях;
- подключения с их свойствами;
- данные об обновлении датасетов с учетом иерархии.
Интегральные отчеты объектной модели:
- дашборд по количеству объектов на любую дату в пределах периода версионирования данных;
- дашборд на основе плоской таблицы связей: каждая точка публикации отчетов в «Коллекции» связана с рабочей книгой разработчика, со всеми компонентами, датасетами и подключениями — с учетом иерархий объектов и их взаимосвязей.
Группа сервисных дашбордов:
- дашборд на основе конфигурационной таблицы FineDB fine_conf_entity с поддержкой иерархического представления объектов;
- дашборд по выполнению расчетов ОМ через запуск функций — с результатом, временем выполнения, составом расчета;
- дашборд с автоматическим перечнем используемых в ОМ таблиц и их полей, плюс оценкой полноты описания системы (см. рис. 3);
- дашборд с автоматическим перечнем используемых в ОМ функций расчета данных и связанных с ними таблиц;
- дашборд с данными версионированных таблиц FineDB — для мониторинга активности использования таблиц и динамики занимаемого ими в БД пространства.
В следующих статьях разберем отдельные системные дашборды, которые чаще всего используем в работе. Покажем их структуру, приведем кейсы использования, добавим скриншоты дашбордов и их фрагментов. Настройка RLS для разделения доступа к данным На данных, лежащих в основе системных дашбордов (например, «Дашборды в коллекции», «Датасеты»), можно настроить автоматическую RLS-фильтрацию по логину пользователя — а через назначенные роли определять, какой контент ему виден. Если у пользователя несколько ролей — основной RLS-датасет дополняется связью с таблицей, где собраны все роли пользователей. Дальше по роли сопоставляем название каталога в разделах «Коллекция» и «Источники» с контентом, доступным по правилам. Ограничения и недостатки реализации У нашего варианта реализации ОМ есть свои плюсы и минусы. По применимости решения действует ряд ограничений. Кроме того, есть потенциал оптимизации в части структуры. Ограничения:
- реализовано на PostgreSQL;
- для части функционала нужно подключенное версионирование таблиц;
- для кросс-расчетов с FineDB требуется подключение к LogDB на PostgreSQL;
- в FineDB нет данных о размерах датасетов — оперативный мониторинг занимаемого ими места не работает;
- денормализованные данные сильно влияют на объем, который занимают таблицы ОМ в БД.
В нашей инсталляции за год использования размер таблиц самой ОМ вырос в три раза. С учетом размеров системных дашбордов совокупный рост — шестикратный относительно исходной FineDB. Если исходная FineDB, условно, включает таблицы общим размером 1 ГБ, то решение ОМ и системные дашборды занимают 6 ГБ. Недостатки:
- есть особенности вызова функций внутри мастер-функции (при длительном выполнении функции на больших инсталляциях может понадобиться увеличить лимит времени на транзакцию — иначе функции после разрыва сессии упадут с ошибкой);
- не оптимизированы типы полей сущностей: размерность текстовых и числовых полей можно уменьшать под фактический контент — таблицы формировались через автосоздание из запроса;
- иногда остаются артефакты (сущности) старых состояний системы — после неполной очистки в системе сохраняются записи, которых уже нет в текущем состоянии;
- некоторые таблицы изначально получаются большими и по ходу эксплуатации только растут, их обработка занимает все больше времени — а это значительно увеличивает период полного расчета всей ОМ;
- следствие предыдущего пункта: при сведении объектов через таблицы связей часть данных может отсутствовать — данные о связи появляются в расчете позже, чем списки объектов;
- для некоторых таблиц со временем понадобятся индексы для ускорения работы — и это увеличит размер данных, занимаемых ОМ;
- есть отступления от принятого нейминга в названиях таблиц и полей.
Заключение Мы разобрали процесс создания объектной модели на данных FineDB и LogDB, затронули особенности сопровождения решения и привели примеры системных дашбордов на ее основе. ОМ периодически адаптируется к изменениям самой БД при обновлении версии ПО. Это нормальный процесс — растянутый во времени и направленный на то, чтобы модель оставалась максимально близкой к реальной системе. В репозитории GitHub по ссылке лежит SQL-код в диалекте PostgreSQL для создания таблиц ОМ и связанных с ними функций расчета данных. Решение можно развернуть для ознакомления самостоятельно и без ограничений использовать в работе. В следующей статье разберем систему версионирования таблиц FineDB. Она заметно расширяет возможности мониторинга состояний системы во времени и построения отчетности с историческими данными. Это решение не раз помогало нам быстро откатывать нежелательные изменения — в частности, при работе с плагином синхронизации пользователей.-Источник
|