0Pricing
SQL Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. Стратегии шардинга: диапазон, хеш и каталог
  2. Запросы между шардами: сложная задача
  3. Citus и распределённый Postgres
  4. Когда НЕ стоит использовать шардинг
← Назад к SQL Academy