0Pricing
SQL Academy · 课时

Citus 与分布式 Postgres

使用 Citus 将 Postgres 转变为分布式数据库,并了解共置表和引用表

Citus 与分布式 Postgres 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

什么是 Citus

Citus 是 PostgreSQL 的扩展,可将 PostgreSQL 服务器集群转换为分布式数据库。您可以对协调节点执行 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 的行始终位于同一个工作节点上。在 user_id 上执行的 JOIN 可以保持在本地:

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」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。

「Citus 与分布式 Postgres」这节课中我会学到什么?

使用 Citus 将 Postgres 转变为分布式数据库,并了解共置表和引用表 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 SQL Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「Citus 与分布式 Postgres」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 SQL Academy 课中编写并运行代码吗?

能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 分片策略:范围、哈希与目录
  2. 跨分片查询:棘手的问题
  3. Citus 与分布式 Postgres
  4. 何时不应分片
← 返回 SQL Academy