Проекты
Конкурсные проекты

Расширение PostgreSQL для контроля целостности данных на всех уровнях


Тип участника:  Физическое лицо
Полное наименование организации/физического лица/авторского или творческого коллектива:  Донской В.Д.
Контактное лицо: ФИО:  Донской В.Д.
Идея и краткое описание ИТ-проекта:  Разработано расширение для СУБД PostgreSQL, которое позволяет вычислять контрольные суммы на пяти уровнях иерархии данных: ячейка, строка, таблица, индекс, база данных. Расширение поддерживает два режима работы — физический (зависит от расположения данных на диске) и логический (зависит только от значений данных). Логические контрольные суммы остаются неизменными при операциях реорганизации (VACUUM FULL, CLUSTER, REINDEX), что позволяет проверять согласованность данных между репликами, верифицировать целостность после миграций и обнаруживать скрытые изменения. Реализация выполнена на языке C с использованием внутреннего API PostgreSQL, поддерживаются все основные типы данных и методы доступа индексов (B‑tree, Hash, GiST, GIN, SP‑GiST, BRIN).
Перечень решаемых задач: 
  1. Обеспечение логической проверки целостности данных — разработка механизма вычисления контрольных сумм, которые зависят только от значений данных и не меняются при физической реорганизации (VACUUM FULL, CLUSTER, REINDEX).

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

  3. Обнаружение скрытых изменений данных — выявление несанкционированных или ошибочных изменений, которые не обнаруживаются встроенными средствами (page checksums, WAL).

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

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

  6. Аудит изменений данных — создание инструмента для периодического сравнения эталонных контрольных сумм с текущими значениями с целью выявления модификаций данных.

Описание функциональных возможностей и элементов проекта: 

1. Функциональные возможности

1.1. Вычисление контрольных сумм на пяти уровнях иерархии данных:

  • Уровень ячейки — вычисление контрольной суммы отдельного атрибута (с поддержкой всех типов данных, включая TOAST и NULL).

  • Уровень строки — вычисление контрольной суммы всей строки (физическая — с учётом расположения и заголовка; логическая — только по значениям атрибутов, с обязательным использованием первичного ключа).

  • Уровень таблицы — агрегация контрольных сумм всех строк таблицы (с сортировкой для независимости от порядка).

  • Уровень индекса — вычисление контрольных сумм для всех типов индексов (B-tree, Hash, GiST, GIN, SP-GiST, BRIN) как по физической структуре, так и по логическим ключам.

  • Уровень базы данных — агрегация контрольных сумм всех отношений в базе данных (с возможностью исключения системных каталогов и TOAST-таблиц).

1.2. Поддержка двух режимов вычисления:

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

  • Логический режим — контрольная сумма зависит только от значений данных и не меняется при операциях VACUUM FULL, CLUSTER, REINDEX. Используется для проверки логической целостности, сравнения реплик и аудит.

2. Элементы проекта

2.1. Программная реализация:

  • Язык реализации: C (с использованием внутреннего API PostgreSQL).

  • Интерфейс: набор SQL-функций, доступных для вызова из любого клиента PostgreSQL.

  • Алгоритм хеширования: FNV-1a (32-битный).

2.2. Структура проекта:
  • Сборка: стандартная система сборки PostgreSQL (PGXS).

  • Документация: пояснительная записка объёмом 40 страниц, включающая описание архитектуры, реализации и тестирования.

2.3. Тестирование:

  • Регрессионные тесты (более 100 тестов) с использованием pg_regress.

  • Тесты стабильности логических сумм после VACUUM FULL, CLUSTER, REINDEX.

  • Тесты производительности для объёмов данных от 100 до 1 000 000 строк.

  • Тесты обработки NULL, пустых таблиц, различных типов данных и индексов.


Дата внедрения (в случае, если предполагается запуск проекта в эксплуатацию):  -
Используемые платформы, средства разработки: 
  • Платформа: PostgreSQL 18, Linux / Unix-подобные ОС.

  • Язык: C (внутренний API PostgreSQL).

  • Сборка: PGXS (стандартная инфраструктура сборки расширений PostgreSQL), Make, GCC/Clang.

  • Тестирование: pg_regress (регрессионные тесты).

  • Система контроля версий: Git, GitHub.

Стоимость разработки системы:  0 руб
Средний размер ежегодных затрат на эксплуатацию:  0 руб — расширение не требует лицензионных отчислений, работает на стандартном PostgreSQL и не создаёт дополнительной нагрузки на инфраструктуру
Перспективы развития: 

1. Технические улучшения:

  • Инкрементальное обновление контрольных сумм — разработка механизма, который позволяет пересчитывать только изменённые строки, а не всю таблицу. Это сократит время вычисления для больших таблиц на порядки.

  • Параллельное сканирование — адаптация расширения для использования параллельных рабочих процессов PostgreSQL (Parallel Seq Scan), что ускорит вычисление сумм для таблиц большого объёма.

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

  • Поддержка материализованных представлений — расширение функциональности на материализованные представления, которые также являются хранимыми данными.

  • Поддержка внешних таблиц — возможность вычислять контрольные суммы для данных, доступных через FDW (например, в других СУБД или файловых системах).

2. Функциональные расширения:

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

  • Автоматическое оповещение — интеграция с механизмом уведомлений PostgreSQL (NOTIFY) для автоматического информирования администратора о расхождении контрольных сумм.

  • Проверка целостности с учётом сжатия — поддержка таблиц с включённым сжатием (ZSTD, LZ4).

  • Поддержка JSON/JSONB полей — более глубокая интеграция с полуструктурированными данными.

Достижение поставленных целей: 

Достижение целей

Все задачи, поставленные в рамках дипломной работы, полностью решены:

  1. Анализ — изучены существующие механизмы обеспечения целостности в PostgreSQL, выявлены их ограничения.

  2. Проектирование — спроектирована архитектура расширения, выбран алгоритм FNV-1a, разработаны методы агрегации, независимые от порядка обхода.

  3. Реализация — расширение реализовано на C, поддерживает все типы данных и методы доступа индексов, вычисляет физические и логические суммы на пяти уровнях.

  4. Тестирование — проведено регрессионное тестирование (более 100 успешных тестов), тесты стабильности логических сумм и тесты производительности.

Завершённость проекта

Проект полностью завершён:

  • Код опубликован на GitHub под лицензией MIT.

  • Сборка выполняется стандартной командой через PGXS.

  • Установка — стандартная CREATE EXTENSION.

  • Документация — пояснительная записка на 40 страниц.

  • Тестирование — все тесты успешно пройдены.

  • Готовность — расширение готово к использованию в производственных средах.

Актуальность, экономическая или социальная полезность: 

Актуальность: PostgreSQL является одной из наиболее распространённых СУБД в корпоративном секторе. Однако встроенные средства контроля целостности (page checksums, WAL) работают преимущественно на физическом уровне и не позволяют проверять логическое содержимое данных после реорганизации (VACUUM FULL, CLUSTER, REINDEX). Отсутствие инструментов для многоуровневой проверки целостности создаёт риски при миграциях, репликации и аудите данных. Разработанное расширение закрывает этот функциональный пробел.

Экономическая полезность: расширение позволяет:

  • Снизить затраты на проверку целостности данных за счёт исключения необходимости полного сравнения таблиц через pg_dump (экономия времени и дискового пространства).

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

  • Бесплатное использование — код распространяется под лицензией MIT, что исключает лицензионные отчисления в отличие от коммерческих решений.

Социальная полезность: разработанное расширение является открытым и доступно для всех пользователей PostgreSQL. Оно способствует повышению надёжности систем хранения данных, помогая предотвращать потерю и искажение информации в медицинских, финансовых и государственных информационных системах. Расширение может использоваться для обеспечения требований к целостности данных при прохождении сертификации и соответствия регуляторным стандартам (152-ФЗ). Открытый исходный код позволяет сообществу разработчиков участвовать в доработке и совершенствовании инструмента.

Масштабируемость, способность к взаимодействию с другими системами, мобильность: 

Масштабируемость

  • Линейная масштабируемость подтверждена тестами до 1 млн строк.

  • Время выполнения растёт линейно с объёмом данных, коэффициент постоянен.

  • Отсутствие блокировок позволяет параллельную работу других пользователей.

  • Архитектура модульная, легко добавляются новые уровни и методы доступа.

Взаимодействие с другими системами

  • Стандартный SQL-интерфейс — интеграция с любыми клиентами PostgreSQL.

  • Совместимость с системами мониторинга (Prometheus, Zabbix) через SQL-запросы.

  • Открытый код под лицензией MIT — легко адаптируется под любые задачи.

Мобильность

  • Кроссплатформенность — работает на Linux, macOS, Windows.

  • Сборка через стандартную систему PGXS — установка на любую платформу.

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

Обоснованность применяемых проектных решений: 

Все проектные решения обоснованы архитектурой PostgreSQL и стандартами сообщества:

  • Алгоритм хеширования FNV-1a — уже используется в ядре PostgreSQL для page checksums, обеспечивает детерминизм, высокую скорость и совместимость.

  • Язык C — единственный способ получить прямой доступ к внутреннему API PostgreSQL (буферный кеш, страницы, кортежи, системные каталоги), обеспечивает максимальную производительность и интеграцию.

  • Блокировки AccessShareLock — минимальный уровень блокировок, не конфликтует с DML-операциями и позволяет работать в многопользовательской среде.

  • Сборка через PGXS — стандартная инфраструктура сборки расширений PostgreSQL, обеспечивает кроссплатформенность и простоту установки.

  • Разделение физического и логического режимов — обусловлено различными задачами: обнаружение повреждений (физический) и проверка неизменности содержимого (логический).

  • Обработка NULL через 0xFFFFFFFF — обеспечивает детерминированную обработку NULL, отличную от любых реальных данных.

Выбранные решения гарантируют производительность, совместимость, безопасность и расширяемость разработанного расширения.

Оригинальность, новизна, отличие от аналогов либо отсутствие аналогов: 

Существующие инструменты PostgreSQL (page checksums, amcheck, pg_row_hashes) решают лишь отдельные задачи контроля целостности и не предоставляют комплексного многоуровневого решения. Разработанное расширение pg_checksums впервые предлагает:

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

  • Два режима: физический (для обнаружения повреждений) и логический (устойчивый к VACUUM FULL, CLUSTER, REINDEX).

  • Поддержку всех типов индексов (B‑tree, Hash, GiST, GIN, SP‑GiST, BRIN) и всех основных типов данных PostgreSQL.

Аналоги (page checksums, amcheck, pg_row_hashes) либо ограничены одним уровнем, либо не поддерживают логические суммы, либо не охватывают все типы индексов. Таким образом, pg_checksums является уникальным решением, не имеющим полных аналогов в экосистеме PostgreSQL.

Гарантирую достоверность предоставленной в заявке информации. Подтверждаю, что организация не находится в состоянии ликвидации, банкротства, реорганизации (Только для организаций):  Да
Презентация проекта pdf:  Загрузить
Возврат к списку
нет доступа к комментариям Авторизоваться