การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช
เลือกกลยุทธ์การแบ่งพาร์ทิชันที่เหมาะสม: แบบช่วงสำหรับข้อมูลอนุกรมเวลา แบบรายการสำหรับผู้เช่า และแบบแฮชสำหรับการกระจายอย่างสม่ำเสมอ
การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
การแบ่งพาร์ทิชันตามช่วงค่า
แต่ละพาร์ทิชันครอบคลุมช่วงค่าที่ต่อเนื่องกัน วิธีนี้มักใช้กับข้อมูลอนุกรมเวลา:
CREATE TABLE events (
id BIGSERIAL,
ts TIMESTAMPTZ NOT NULL,
data JSONB
) PARTITION BY RANGE (ts);
CREATE TABLE events_2024_q1 PARTITION OF events
FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');
CREATE TABLE events_2024_q2 PARTITION OF events
FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');ขอบเขตของช่วงเป็นแบบเปิดครึ่งหนึ่ง
FROM รวมค่าในขอบเขต แต่ TO ไม่รวมค่าในขอบเขต ขอบเขตจึงต่อกันได้พอดี ไม่มีค่าซ้ำซ้อนและไม่มีช่องว่าง
การแบ่งพาร์ทิชันตามรายการ
แต่ละพาร์ทิชันเก็บค่าเฉพาะ:
CREATE TABLE customers (
id BIGSERIAL,
country TEXT NOT NULL,
name TEXT
) PARTITION BY LIST (country);
CREATE TABLE customers_us PARTITION OF customers FOR VALUES IN ('US');
CREATE TABLE customers_eu PARTITION OF customers FOR VALUES IN ('DE','FR','IT','ES','NL');
CREATE TABLE customers_other PARTITION OF customers DEFAULT;พาร์ทิชัน DEFAULT
ใช้รองรับแถวที่ไม่ตรงกับพาร์ทิชันอื่น หากไม่มีพาร์ทิชันนี้ INSERT ของแถวที่ไม่ตรงกับพาร์ทิชันใดจะล้มเหลว
การแบ่งพาร์ทิชันแบบแฮช
แถวจะถูกกระจายโดยแฮชคีย์สำหรับแบ่งพาร์ทิชัน เหมาะเมื่อคุณต้องการการกระจายที่สม่ำเสมอ แต่ไม่มีช่วงหรือรายการตามธรรมชาติ:
CREATE TABLE sessions (
id UUID,
user_id BIGINT,
data JSONB
) PARTITION BY HASH (user_id);
CREATE TABLE sessions_0 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE sessions_1 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE sessions_2 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE sessions_3 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 3);การเลือกกลยุทธ์
- Range — อนุกรมเวลาและรหัสที่เพิ่มขึ้นอย่างต่อเนื่อง
- List — ผู้เช่า ประเทศ หรือระดับข้อมูลที่มีการใช้งานสูง
- Hash — เมื่อไม่มีการกระจายที่เอนเอียงตามธรรมชาติ และต้องการเพียงการทำงานแบบขนาน
การแบ่งพาร์ทิชันย่อย
พาร์ทิชันสามารถถูกแบ่งพาร์ทิชันต่อได้อีกหลายระดับ:
CREATE TABLE events_2024 PARTITION OF events
FOR VALUES FROM ('2024-01-01') TO ('2025-01-01')
PARTITION BY HASH (user_id);
-- 2024 is a yearly range partition, internally hashed by user_id.ดัชนีบนตารางที่แบ่งพาร์ทิชัน
ดัชนีบนตารางแม่จะส่งต่อไปยังพาร์ทิชันทั้งหมดโดยอัตโนมัติ ข้อจำกัด UNIQUE ต้องมีคีย์สำหรับแบ่งพาร์ทิชันรวมอยู่ด้วย:
CREATE INDEX events_user_idx ON events (user_id);
-- Creates one index per partition automatically.
ALTER TABLE events ADD CONSTRAINT events_uniq UNIQUE (id, ts);
-- ts must be in the constraint because it's the partition key.คีย์หลักและพาร์ทิชัน
PRIMARY KEY ของตารางที่แบ่งพาร์ทิชันต้องมีคอลัมน์สำหรับแบ่งพาร์ทิชันรวมอยู่ด้วย นี่เป็นข้อจำกัดพื้นฐานของการแบ่งพาร์ทิชันเชิงประกาศ
การเพิ่มและลบพาร์ทิชัน
การดำเนินการที่มีต้นทุนต่ำ:
CREATE TABLE events_2024_q3 PARTITION OF events
FOR VALUES FROM ('2024-07-01') TO ('2024-10-01');
DROP TABLE events_2023_q1;
-- Instant; equivalent to deleting all old data.การสร้างพาร์ทิชันโดยอัตโนมัติ
Postgres ไม่สร้างพาร์ทิชันในอนาคตโดยอัตโนมัติ วิธีแก้ปัญหาที่ใช้กันทั่วไป:
- ส่วนขยาย pg_partman — จัดการพาร์ทิชันรายเดือน
- งานตามกำหนดเวลาที่ใช้ CREATE เพื่อสร้างพาร์ทิชันถัดไป
คีย์ต่างประเทศ
FK ที่อ้างอิงตารางที่แบ่งพาร์ทิชันต้องใช้ PG 12 ขึ้นไป ส่วน FK จากตารางที่แบ่งพาร์ทิชันไปยังตารางปกติทำงานได้ตามปกติ
สรุป
กลยุทธ์การแบ่งพาร์ทิชันสามรูปแบบครอบคลุมกรณีส่วนใหญ่
- Range สำหรับข้อมูลตามเวลาและข้อมูลตามลำดับ
- List สำหรับชุดค่าที่แยกจากกัน
- Hash สำหรับการกระจายอย่างสม่ำเสมอ
- PK ต้องมีคอลัมน์สำหรับแบ่งพาร์ทิชันรวมอยู่ด้วย
ตรวจสอบความเข้าใจ
คุณต้องการแบ่งตาราง sessions ตาม user_id ให้ข้อมูลกระจายอย่างสม่ำเสมอและไม่มีลำดับตามธรรมชาติ ควรใช้กลยุทธ์ใด
คำถามที่พบบ่อย
บทเรียน “การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช”
เลือกกลยุทธ์การแบ่งพาร์ทิชันที่เหมาะสม: แบบช่วงสำหรับข้อมูลอนุกรมเวลา แบบรายการสำหรับผู้เช่า และแบบแฮชสำหรับการกระจายอย่างสม่ำเสมอ คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุผลที่ต้องแบ่งพาร์ทิชัน: การตัดส่วนและการดูแลรักษา
- การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช
- การถอดและแนบพาร์ทิชัน
- การค้นหาข้ามพาร์ทิชันอย่างมีประสิทธิภาพ