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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กลยุทธ์การแบ่งข้อมูล: แบบช่วง แบบแฮช และแบบไดเรกทอรี
- คำสั่งค้นหาข้ามส่วนข้อมูล: ปัญหาที่ยากที่สุด
- Citus และ Postgres แบบกระจาย
- เมื่อใดไม่ควรแบ่งข้อมูล