0Pricing
SQL Academy · レッスン

Citusと分散Postgres

Citusを使ってPostgresを分散データベースに変え、同一配置テーブルと参照テーブルを活用します。

「Citusと分散Postgres」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

Citusとは

Citusは、PostgreSQLサーバーのクラスターを分散データベースに変えるPostgreSQL拡張です。コーディネーターに対してSELECT/INSERTを実行すると、Citusが適切なワーカーシャードへ透過的にルーティングします。

アーキテクチャ

2つのロールがあります:

  • コーディネーター — クエリを受け取り、クラスターのメタデータを保持し、ルーティングと集約を行います
  • ワーカー — シャードデータを保持し、実際のクエリを実行します

セットアップ

コーディネーターとワーカーに拡張をインストールし、ワーカーを登録します:

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.

制限事項

  • コロケーションされていないテーブルをまたぐトランザクションには制限があります
  • 一部のPostgres機能は分散テーブルに適用できません
  • スキーマ変更は伝播されますが、調整が必要です

Citus Cloud / Azure

CitusはMicrosoftに買収され、現在はAzure Database for PostgreSQL — Hyperscale (Citus)の一部です。現在もオープンソースで提供されています。

代替製品

  • YugabyteDB — 分散型のPostgreSQL互換データベース
  • CockroachDB — Postgres wire互換の分散データベース
  • Pgvector / TimescaleDB — 単一ノード向けの特化製品

Citusが適している場合

各テナントのクエリを分離するマルチテナントSaaSに適しています。テナントと時刻でパーティション分割する時系列データにも適しています。並列集約を行う分析用途にも適しています。

まとめ

CitusはPostgresを分散化します。

  • コーディネーターとワーカー
  • 列で分散し、ローカルJOINのためにコロケーション
  • 共有ディメンションにはリファレンステーブル
  • 最適な用途:マルチテナントSaaS

確認問題

Citusで2つの分散テーブルを同じキーにコロケーションするメリットは何でしょうか。

よくある質問

「Citusと分散Postgres」レッスンは無料ですか?

はい。「Citusと分散Postgres」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「Citusと分散Postgres」で何を学びますか?

Citusを使ってPostgresを分散データベースに変え、同一配置テーブルと参照テーブルを活用します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応の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に戻る