CITUS
Зачем
Расширение Postgres
- Реализация Паттерна вертикального, горизонтального шардирования (партиционирование, секционирование)
- Fast queries for all tenants
- Sharding logic in the database, not the application
- Hold more data than possible in single-node PostgreSQL
- Scale out without giving up SQL
- Maintain performance under high concurrency
- Fast metrics analysis across customer base
- Easily scale to handle new customer signups
- Isolate resource usage of large and small customers
Плюсы и минусы
Плюсы:
- Прозначный, быстрый для разработчика способ горизонтального партиционирования\шардирования данных между инстансами СУБД
Минусы:
- Отдельный инстанс СУБД PostgreSQL Coordinator – Точка отказа, bottleneck, реплику StandBy Можно настроить PostgreSQL
- Нет экспертизы
- Нужен DBA\INFRA
- Enterprise Version Rebalance Shard New Node (в ручном режиме больше Downtime) Monitoring (без нужно разбираться) Репликация Master-Slave (без нужно разбираться) Tenant Isolation
- Есть ограничения SQL
- Correlated subqueries
- Recursive CTEs
- Table sample
- SELECT … FOR UPDATE
- Grouping sets
Паттерны
- Создание масштабируемой и высокодоступной системы Postgres с помощью Patroni 3.0 и Citus (docker пример)
- Типы данных
- Distributed Tables Distribution Column=TenantId Таблица горизонтально шардируется на ноды PostgreSQL Co-Location размещение связанных таблиц на одной ноде для производительности запросов
- Reference Tables Справочники размещаются на каждой ноде с репликацией данных
- Local Tables Не шардируемые по нодам таблицы (Пользователи например)
- Timeseries Data Авто партиционирование данных для возможности удаления устаревших данных онлайн без снижения доступности БД
Версии
- 12.1
- поддержка Postgres 16