PGSuite - набор инструментов для создания легковесных web-приложений по архитектуре "Клиент-сервер" (HTML/JavaScript и PostgreSQL) без backend-слоя.

Философия проекта: Современные вычислительные мощности избыточны для небольших проектов, что позволяет полностью отказаться от backend-части и собирать приложения прямо в PostgreSQL.

Изначально инструменты легковесные, но заложен потенциал на будущее: при росте нагрузки коммерческие модификации Highload Pack обеспечивают горизонтальное масштабирование за счет переноса чтения на реплики. Это делает стек применимым даже в высоконагруженных системах, где критически важна скорость обработки данных на уровне ядра БД.


Архитектура


Архитектурный манифест:

Only PostgreSQL, only hardcore!





Компоненты


PGHist—PGHist ведет историю изменений таблиц и позволяет получить лог(аудит) изменений по строкам, список изменений по полям и таблицу на момент времени в прошлом (версионирование)
PGXLS—PGXLS - SQL-схема с процедурами для создания файлов в формате Excel(.xlsx), имеет 2 режима работы: выгрузка данных по SQL-запросу и построение отчетов
PGHtml—PGHtml - утилита командной строки, создает HTML, JS, JSON и другие типы файлы с использованием данных, получаемых из базы данных PostgreSQL
PGORM—PGORM позволяет подключаться к PostgreSQL с web-страниц, выполнять SQL-запросы, использовать ORM и получать файлы
PG1C—PG1C - расширение PostgreSQL, встраивает информационную базу 1С в PostgreSQL - создает и обновляет таблицы идентичные 1С. Простые SQL-запросы копируются из 1С без изменений



Highload Pack — пакет модификаций под высокие нагрузки


Для некоторых компонент разработаны коммерческие модификации (highload-плагины), которые предназначены для горизонтального масштабирования и оптимизации производительности.

PGHist —асинхронно вычитывает изменения таблиц по протоколу репликации и записывает их в таблицы истории
PGXLS —поддерживает формирование отчетов на реплике (standby), сокращает время в 3–5 раз
PG1C —в 1С отслеживает изменения в объектах конфигурации (таблицах) через План обмена и обновляет в PostgreSQL только их


Основная идея:

Перенос читающей нагрузки на реплики



В большинстве систем чтение кратно преобладает над записью, время синхронного commit ничтожно меньше общего времени транзакции и сетевого обмена браузер ↔ веб-сервер ↔ база данных, поэтому разумным видится разделение чтения на OLTP/OLAP и перенос его с мастера (primary) на реплики (standby).
Для примера рассмотрим вариант распределения функционала в HA-кластере Patroni из 5 нод:

Инженерные принципы пакета



GitHub


Исходный код выложен в репозитории GitHub


Лицензионное соглашение


Лицензионное соглашение

Свидетельство о регистрации


▲