Citus и распределённый Postgres
Используйте Citus, чтобы превратить Postgres в распределённую базу данных с совместно размещёнными таблицами и справочными таблицами
«Citus и распределённый Postgres» — бесплатный урок SQL Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Что такое Citus
Citus — расширение PostgreSQL, которое превращает кластер серверов PG в распределенную базу данных. Вы выполняете SELECT/INSERT на координаторе, а Citus прозрачно направляет запросы на нужные рабочие шарды.
Архитектура
Две роли:
- Координатор — принимает запросы, хранит метаданные кластера, маршрутизирует и агрегирует результаты
- Рабочие узлы — хранят данные шардов и выполняют фактические запросы
Настройка
Установите расширение на координаторе и рабочих узлах, затем зарегистрируйте рабочие узлы:
CREATE EXTENSION citus;
-- On the coordinator, add worker nodes:
SELECT * FROM master_add_node('worker1', 5432);
SELECT * FROM master_add_node('worker2', 5432);Распределенные таблицы
Пометьте таблицу как распределенную по столбцу:
CREATE TABLE orders (
id BIGSERIAL,
user_id BIGINT NOT NULL,
total NUMERIC(10,2),
...
);
SELECT create_distributed_table('orders', 'user_id');
-- Citus splits orders into shards by hash(user_id).Справочные таблицы
Небольшие таблицы, реплицированные на каждый рабочий узел; JOIN с ними выполняется локально:
CREATE TABLE countries (id INT, name TEXT);
SELECT create_reference_table('countries');
-- Every worker has a full copy of countries.Совместное размещение
Таблицы с одним и тем же столбцом распределения размещаются совместно: строки для конкретного user_id всегда находятся на одном рабочем узле. JOIN по user_id остается локальным:
SELECT create_distributed_table('orders', 'user_id');
SELECT create_distributed_table('events', 'user_id', colocate_with => 'orders');Запросы одного арендатора
Citus направляет запросы с фильтрацией по user_id на нужный рабочий узел — быстро:
SELECT * FROM orders WHERE user_id = 42;
-- Goes to one worker shard, returns in milliseconds.Распределенная агрегация
Citus выполняет COUNT/SUM параллельно на рабочих узлах:
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;
-- Each worker computes locally; coordinator concatenates.Балансировка
Добавьте рабочий узел и выполните балансировку шардов:
SELECT * FROM citus_add_node('worker3', 5432);
SELECT * FROM rebalance_table_shards('orders');
-- Citus moves some shards onto the new worker.Ограничения
- Транзакции между несовместно размещенными таблицами ограничены
- Некоторые возможности PostgreSQL не применяются к распределенным таблицам
- Изменения схемы распространяются, но требуют координации
Citus Cloud / Azure
Citus был приобретен Microsoft и теперь входит в Azure Database for PostgreSQL — Hyperscale (Citus). Он также остается проектом с открытым исходным кодом.
Альтернативы
- YugabyteDB — распределенная база данных, совместимая с PG
- CockroachDB — распределенная база данных, совместимая с протоколом PostgreSQL
- Pgvector / TimescaleDB — специализированные решения для одного узла
Когда Citus подходит лучше
Мультитенантный SaaS, где запросы каждого арендатора изолированы. Временные ряды с разделением по арендатору и времени. Аналитика с параллельной агрегацией.
Итоги
Citus превращает PostgreSQL в распределенную систему.
- Координатор и рабочие узлы
- Распределение по столбцу; совместное размещение для локальных JOIN
- Справочные таблицы для общих измерений
- Лучше всего подходит для мультитенантного SaaS
Быстрая проверка
В чем преимущество совместного размещения двух распределенных таблиц по одному ключу в Citus?
Часто задаваемые вопросы
Урок «Citus и распределённый Postgres» бесплатный?
Да — полный текст урока «Citus и распределённый Postgres» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Citus и распределённый Postgres»?
Используйте Citus, чтобы превратить Postgres в распределённую базу данных с совместно размещёнными таблицами и справочными таблицами Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Citus и распределённый Postgres»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Стратегии шардинга: диапазон, хеш и каталог
- Запросы между шардами: сложная задача
- Citus и распределённый Postgres
- Когда НЕ стоит использовать шардинг