惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
N
News and Events Feed by Topic
Latest news
Latest news
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
CXSECURITY Database RSS Feed - CXSecurity.com
IT之家
IT之家
V
V2EX
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
Cisco Talos Blog
Cisco Talos Blog
K
Kaspersky official blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
小众软件
小众软件
A
Arctic Wolf
酷 壳 – CoolShell
酷 壳 – CoolShell
腾讯CDC
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
G
GRAHAM CLULEY
罗磊的独立博客
T
Tor Project blog
C
Cisco Blogs
美团技术团队
博客园 - Franky
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
T
Threat Research - Cisco Blogs
Cyberwarzone
Cyberwarzone
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
有赞技术团队
有赞技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Security Latest
Security Latest
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
Spread Privacy
Spread Privacy
J
Java Code Geeks
C
CERT Recently Published Vulnerability Notes
大猫的无限游戏
大猫的无限游戏
S
Securelist
The Cloudflare Blog
博客园 - 叶小钗
D
Darknet – Hacking Tools, Hacker News & Cyber Security
阮一峰的网络日志
阮一峰的网络日志
雷峰网
雷峰网
Project Zero
Project Zero

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Версионирование таблиц репозитория метаданных Sigla Vision
IgoNiko (Газ · 2026-05-21 · via Все публикации подряд на Хабре

Продолжаем серию публикаций «Адаптивное администрирование Sigla Vision».  

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

В этом материале расскажем, как построить систему версионирования для репозитория метаданных Sigla Vision (БД FineDB). Самой FineDB такая информация недоступна — там в основном данные только о текущем состоянии системы.

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

Описанный подход не привязан к Sigla Vision — он применим к любой аналитической системе, где метаданные хранятся во внешней СУБД с поддержкой триггеров.

Концепция системы версионирования таблиц

Причина появления функционала версионирования данных проста. В Sigla Vision «из коробки» нет возможности отследить все изменения в системе:

  1. БД FineDB содержит в основном объекты Sigla Vision для текущего состояния системы.

  2. Записи в таблицах БД LogDB отражают только заранее определенные события, которые произошли в системе.

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

Иногда нам достаточно знать, что и как менялось, даже если мы не знаем кем. Большая часть действий в системе оставляет след на уровне таблиц БД FineDB. ПО вносит изменения в таблицы под своей учетной записью СУБД. Логинов пользователей Sigla Vision здесь нет, но для многих задач они и не нужны. Главное в мониторинге — само событие и его временна́я метка.

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

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

Основная цель доработки — добавить протоколирование изменений в таблицах репозитория метаданных Sigla Vision в разрезе сущностей системы.

Функционал версионирования таблиц FineDB качественно расширяет возможности мониторинга Sigla Vision. С полной историей изменений содержимого таблиц FineDB администраторы могут:

  1. просматривать историю изменений содержимого таблицы или историю изменений отдельных объектов;

  2. восстанавливать состояние таблицы на определенный момент в прошлом;

  3. отслеживать динамику изменений таблиц и объектов.

Все это помогает быстро решать задачи по сбору статистики и мониторингу состояния системы за прошлые периоды — и администрировать систему с гораздо лучшим пониманием процессов.

Особенности реализации системы версионирования таблиц

У функционала версионирования есть особенности, которые надо учитывать.

  1. Быстрое развертывание решения (менее 1 минуты).

  2. Очень низкое потребление вычислительных ресурсов (ЦП, ОЗУ).

  3. Рост занимаемого места в БД: минимум на старте — в 1,5 раза, максимум зависит от состава версионируемых таблиц и интенсивности изменений в них (примеры — ниже).

  4. Минимальная задержка при записи в таблицу FineDB (используется только запись в таблицы версионирования после события с данными из основной таблицы).

  5. Отдельный префикс zst_ в названиях таблиц — чтобы отделить таблицы версионирования от исходных.

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

История может вестись:

  1. для отдельных таблиц FineDB;

  2. для отдельных вспомогательных таблиц (производные таблицы, справочники, сущности), не относящихся к FineDB.

При добавлении, изменении и удалении данных в любом поле версионируемой таблицы изменения логируются в таблицу с префиксом zst_.

В триггерах по умолчанию используется условие на запись любых изменений. Функции можно кастомизировать — записывать только избранные изменения и таким образом существенно экономить занимаемое место в БД.

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

Реализация решения

Объекты системы версионирования таблиц

Чтобы развернуть систему, нужно создать таблицы для хранения версий данных на основе фактической структуры версионируемых таблиц, наполнить их данными, создать триггеры событий (after insert / after update / after delete) и прописать в них вызовы функций обработки.

Схема развертывания и работы системы версионирования таблиц

Схема развертывания и работы системы версионирования таблиц

Функции системы версионирования таблиц:

  1. zst_1_create_table_trigger — создает таблицу для хранения данных версионирования, триггеры и функции триггеров;

  2. zst_2_delete_table_trigger — удаляет таблицу для хранения данных версионирования, триггеры и функции триггеров;

  3. zst_3_auto_create_table_trigger — запускает функцию zst_1_create_table_trigger на основе данных из таблицы zst_1_table_list (списка таблиц для логирования с установочными параметрами);

  4. zst_4_auto_delete_table_trigger — запускает функцию zst_2_delete_table_trigger на основе данных из таблицы zst_1_table_list;

  5. zst_5_create_table_trigger_stat — собирает статистику по виду изменений таблиц (вспомогательная функция);

  6. zst_6_compress_snapshot — сжимает период данных в версионированных таблицах.

Порядок развертывания системы версионирования таблиц

Чтобы настроить и использовать решение, нужно выполнить следующие шаги.

1. Создать все функции: 

  • zst_1_create_table_trigger 

  • zst_2_delete_table_trigger 

  • zst_3_auto_create_table_trigger 

  • zst_4_auto_delete_table_trigger 

  • zst_5_create_table_trigger_stat 

  • zst_6_compress_snapshot

2. Создать все таблицы: 

  • zst_1_table_list 

  • zst_2_table_list_stat 

  • zst_3_table_list_stat_size

3. Заполнить таблицу со списком версионируемых таблиц zst_1_table_list  через вставку результата SQL-запроса. 

4. При необходимости вручную исключить или включить таблицы zst_1_table_list (опциональный шаг).

5. Вызвать функцию zst_3_auto_create_table_trigger, которая создает версионированные таблицы, инициализирует их, добавляет функции обработки событий DML и создает триггеры, которые вызывают эти функции.

6. Запустить функцию zst_5_create_table_trigger_stat для сбора статистики состояния таблиц версионирования.

Сопровождение

Во время работы системы версионирования любые изменения в исходных таблицах — в первую очередь из списка zst_1_table_list — попадают в таблицы версионирования. Любые данные занимают место, поэтому количество версионируемых таблиц и их размеры нужно контролировать.

Основные задачи сопровождения системы версионирования таблиц:

  1. добавление новых таблиц в систему версионирования;

  2. исключение отдельных таблиц из системы версионирования;

  3. сжатие данных версионирования;

  4. мониторинг размера версионированных таблиц.

Добавление новых и исключение старых таблиц

Периодически в систему версионирования нужно добавлять новые таблицы (таблицы Sigla Vision, таблицы ОМ или какие-то другие).

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

Исключать отдельные таблицы из системы версионирования имеет смысл, когда данные из них малоинформативны, динамика изменений чрезмерно высока или таблица слишком быстро растет.

Опять же, доступно два пути: 

  • по одной — через вызов функции zst_2_delete_table_trigger с параметрами, без внесения в список таблиц версионирования;

  • сразу несколько — через вызов функции zst_4_auto_delete_table_trigger с добавлением таблиц в список с необходимыми флагами.

Сжатие данных версионирования

Таблицы неизбежно растут, поэтому встает задача оптимизировать место, которое они занимают в БД.

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

При отборе ранжированных строк записи с событиями insert и update в новом снапшоте становятся только событиями insert — так же, как и при инициализации таблицы версионирования.

Для автоматизации сжатия таблиц была создана функция zst_6_compress_snapshot. Сжатие через функцию работает только при наличии поля уникального идентификатора для ранжирования строк.

Мониторинг размера версионированных таблиц

Чтобы мониторить размеры версионированных таблиц, мы создали системный дашборд на основе сводных таблиц (с показателями «количество строк» и «размер таблиц на диске»).

Несколько примеров скриншотов с информацией по размерам таблиц.

Сравнение размеров исходных таблиц и их таблиц версионирования

Сравнение размеров исходных таблиц и их таблиц версионирования

Вывод: система версионирования кратно увеличивает размер БД по сравнению с исходной.

Статистика записей в таблицах версионирования

Статистика записей в таблицах версионирования

Выводы

  1. Часть таблиц система не изменяет — их можно исключить из версионирования.

  2. Часть таблиц не использует механизмы изменения с помощью UPDATE — при высокой интенсивности удаления/вставки именно они становятся основным фактором роста занимаемого места в БД.

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

Распределение занимаемого места среди таблиц

Распределение занимаемого места среди таблиц

Вывод: более 75% всего объема среди подключенных к системе версионирования таблиц приходится на четыре из них:

  • zst_finebi_report_config_en

  • zst_fine_extra_property

  • zst_finebi_widget_config_en

  • zst_fine_schedule_task_log

Из этих четырех для долгосрочного хранения мы оставили только zst_fine_schedule_task_log (лог задач рассылки контента). Остальные можно сжать до минимально необходимого периода — например, до месяца или квартала.

Заключение

Мы разобрали, как создать систему версионирования таблиц БД FineDB, затронули особенности ее сопровождения и показали пример мониторинга состояния системы через дашборд.

В репозитории GitHub лежит SQL-код (в диалекте PostgreSQL) для создания нужных объектов системы версионирования. Решение можно развернуть у себя, изучить и использовать в работе без каких-либо ограничений. В архиве также есть код решения по созданию объектной модели из предыдущей статьи.

В следующей статье разберем, как с помощью триггеров БД FineDB реализовать дополнительную логику обработки данных при выполнении операций в интерфейсе ПО.