0Pricing
SQL Academy · บทเรียน

Citus และ Postgres แบบกระจาย

ใช้ Citus เปลี่ยน Postgres ให้เป็นฐานข้อมูลแบบกระจาย พร้อมตารางที่อยู่ร่วมกันและตารางอ้างอิง

Citus และ Postgres แบบกระจาย เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

Citus คืออะไร

Citus เป็นส่วนขยายของ PostgreSQL ที่เปลี่ยนคลัสเตอร์เซิร์ฟเวอร์ PG ให้เป็นฐานข้อมูลแบบกระจาย คุณใช้ SELECT/INSERT กับโคออร์ดิเนเตอร์ และ Citus จะกำหนดเส้นทางไปยังชาร์ดของเวิร์กเกอร์ที่เหมาะสมอย่างโปร่งใส

สถาปัตยกรรม

มีสองบทบาท:

  • โคออร์ดิเนเตอร์ — รับ query เก็บข้อมูลเมทาดาทาของคลัสเตอร์ และกำหนดเส้นทางหรือรวมผลลัพธ์
  • เวิร์กเกอร์ — เก็บข้อมูลชาร์ดและดำเนินการกับ query จริง

การตั้งค่า

ติดตั้งส่วนขยายบนโคออร์ดิเนเตอร์และเวิร์กเกอร์ จากนั้นลงทะเบียนเวิร์กเกอร์:

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');

Query ของผู้เช่ารายเดียว

Citus จะกำหนดเส้นทาง query ที่กรองด้วย 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 แบบหลายผู้เช่าซึ่ง query ของผู้เช่าแต่ละรายแยกจากกันได้ อนุกรมเวลาที่แบ่งตามผู้เช่าและเวลา และการวิเคราะห์ที่รวมผลแบบขนาน

สรุป

Citus ทำให้ PostgreSQL เป็นฐานข้อมูลแบบกระจาย

  • โคออร์ดิเนเตอร์และเวิร์กเกอร์
  • กระจายตามคอลัมน์ และอยู่ร่วมชาร์ดเพื่อให้ JOIN ทำงานภายในชาร์ด
  • ตารางอ้างอิงสำหรับมิติที่ใช้ร่วมกัน
  • เหมาะที่สุดกับ SaaS แบบหลายผู้เช่า

ตรวจสอบความเข้าใจอย่างรวดเร็ว

การให้ตารางแบบกระจายสองตาราง "อยู่ร่วมชาร์ด" ด้วยคีย์เดียวกันใน Citus มีประโยชน์อย่างไร

คำถามที่พบบ่อย

บทเรียน “Citus และ Postgres แบบกระจาย” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Citus และ Postgres แบบกระจาย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Citus และ Postgres แบบกระจาย”

ใช้ Citus เปลี่ยน Postgres ให้เป็นฐานข้อมูลแบบกระจาย พร้อมตารางที่อยู่ร่วมกันและตารางอ้างอิง คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 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