Anton Sidorov homepage

Bookmark this to keep an eye on my project updates!

Follow me on GitHub

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 Авто партиционирование данных для возможности удаления устаревших данных онлайн без снижения доступности БД

Версии