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

กลยุทธ์การแบ่งข้อมูล: แบบช่วง แบบแฮช และแบบไดเรกทอรี

เปรียบเทียบการแบ่งข้อมูลแบบช่วง แบบแฮช และแบบอาศัยไดเรกทอรี แล้วเลือกคีย์แบ่งข้อมูลที่กระจายภาระงานได้สมดุลและคงที่

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

Sharding คืออะไร

การแบ่งฐานข้อมูลเชิงตรรกะหนึ่งฐานออกเป็นเซิร์ฟเวอร์จริงหลายเครื่อง (เรียกว่า "ชาร์ด") โดยแต่ละเครื่องเก็บข้อมูลเพียงบางส่วน มักทำเมื่อเซิร์ฟเวอร์เครื่องเดียวไม่สามารถรองรับภาระงานได้อีกต่อไป

Sharding ไม่เท่ากับการจำลองข้อมูล

  • การจำลองข้อมูล — ข้อมูลเดียวกันอยู่บนเซิร์ฟเวอร์หลายเครื่อง (เพื่อ HA และการขยายการอ่าน)
  • Sharding — ข้อมูลต่างกันอยู่บนเซิร์ฟเวอร์ต่างเครื่อง (เพื่อขยายการเขียนและเพิ่มความจุ)

คุณมักใช้ทั้งสองแบบร่วมกัน โดยให้แต่ละชาร์ดมี replica เพื่อรองรับ HA

กลยุทธ์ Sharding สามแบบ

  • ช่วงค่า — แบ่งชาร์ดตามช่วงของค่า (id 1-1M อยู่บนชาร์ด A และ 1M-2M อยู่บนชาร์ด B)
  • แฮช — แฮชคีย์ของชาร์ด แล้วหาค่าเศษด้วย N
  • ไดเรกทอรี — ตารางแยกต่างหากจับคู่คีย์กับชาร์ด

การแบ่งชาร์ดตามช่วงค่า

เรียบง่ายและทำงานได้ดีกับข้อมูลอนุกรมเวลาและ ID ที่เรียงลำดับ ข้อควรระวังคืออาจเกิดชาร์ดร้อน หากข้อมูลล่าสุดได้รับทราฟฟิกทั้งหมด

-- Conceptually:
-- Shard A: user_id 1 - 1,000,000
-- Shard B: user_id 1,000,001 - 2,000,000
-- Shard C: user_id 2,000,001 - 3,000,000

การแบ่งชาร์ดด้วยแฮช

โดยค่าเริ่มต้นจะแจกจ่ายข้อมูลได้สม่ำเสมอ แต่การเพิ่มชาร์ดทำได้ยาก เพราะการแบ่งชาร์ดใหม่จะย้ายคีย์ทั้งหมด:

-- shard_id = hash(user_id) % N
-- N=4: any user_id evenly distributed across 4 shards

การแบ่งชาร์ดด้วยไดเรกทอรี

ตารางค้นหาจะจับคู่แต่ละคีย์กับชาร์ดของคีย์นั้น:

CREATE TABLE shard_routing (
  user_id BIGINT PRIMARY KEY,
  shard_id INT NOT NULL
);

-- Looking up a user costs a directory query first; cache it.

การแฮชแบบสอดคล้อง

การแฮชด้วยการหาค่าเศษจะเปราะบางเมื่อเพิ่มชาร์ด การแฮชแบบสอดคล้องช่วยลดจำนวนคีย์ที่ต้องย้าย:

-- Each shard owns a ring segment.
-- Adding a new shard moves only ~1/N of the keys.

การเลือกคีย์ของชาร์ด

คีย์ของชาร์ดเป็นตัวกำหนดทุกอย่าง คีย์ของชาร์ดที่ดีจะมีลักษณะดังนี้:

  • กระจายข้อมูลได้อย่างสม่ำเสมอ
  • ปรากฏอยู่ใน query ส่วนใหญ่ (ช่วยหลีกเลี่ยงการกระจาย query ไปหลายชาร์ด)
  • เปลี่ยนแปลงไม่ได้ หรือเปลี่ยนแปลงน้อยมาก
<p>Common picks: user_id, tenant_id, customer_id. Avoid: timestamps for write-heavy workloads (creates hot shards).</p>

หนึ่งผู้เช่าต่อหนึ่งชาร์ด

SaaS แบบหลายผู้เช่า: ให้ผู้เช่าแต่ละรายอยู่บนชาร์ดเฉพาะของตนเอง ทำความเข้าใจได้ง่าย และแยกผู้เช่าที่ใช้ทรัพยากรมากผิดปกติได้สะดวก

การออกแบบที่แบ่งชาร์ดใหม่ได้

ออกแบบโดยคำนึงถึงการแบ่งชาร์ดใหม่ในอนาคต:

  • ใช้ชาร์ดเสมือน (เช่น ชาร์ดเชิงตรรกะ 1024 ชุดที่แมปกับชาร์ดจริง)
  • ทำให้การย้ายชาร์ดเชิงตรรกะไปยังเซิร์ฟเวอร์จริงเครื่องอื่นทำได้ง่าย
  • หลีกเลี่ยงโค้ดแอปที่กำหนดจำนวนชาร์ดแบบตายตัว

Query ข้ามชาร์ด

นี่คือปัญหาที่ยากที่สุด JOIN และรายงานที่ครอบคลุมหลายชาร์ดต้องใช้ตรรกะกระจาย query แล้วรวมผลในแอป จะกล่าวถึงในบทเรียนถัดไป

ธุรกรรมข้ามชาร์ด

ธุรกรรมข้ามชาร์ดแบบอะตอมิกต้องใช้การคอมมิตสองระยะ (2PC) หรือซากา คำแนะนำทั่วไปคือออกแบบให้ธุรกรรมอยู่ภายในชาร์ดเดียว

สรุป

มีกลยุทธ์สามแบบ ให้เลือกตามรูปแบบทราฟฟิกของคุณ

  • ช่วงค่า — เรียบง่าย แต่มีความเสี่ยงเกิดชาร์ดร้อน
  • แฮช — กระจายสม่ำเสมอ แต่ยืดหยุ่นน้อย
  • ไดเรกทอรี — ยืดหยุ่น แต่เพิ่มความหน่วง
  • ใช้การแฮชแบบสอดคล้องเพื่อแบ่งชาร์ดใหม่ได้อย่างราบรื่น

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

คุณแบ่งตาราง users ด้วย hash(user_id) จาก 4 ชาร์ดเป็น 5 ชาร์ด จะต้องย้ายคีย์กี่คีย์

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

บทเรียน “กลยุทธ์การแบ่งข้อมูล: แบบช่วง แบบแฮช และแบบไดเรกทอรี” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “กลยุทธ์การแบ่งข้อมูล: แบบช่วง แบบแฮช และแบบไดเรกทอรี”

เปรียบเทียบการแบ่งข้อมูลแบบช่วง แบบแฮช และแบบอาศัยไดเรกทอรี แล้วเลือกคีย์แบ่งข้อมูลที่กระจายภาระงานได้สมดุลและคงที่ คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “กลยุทธ์การแบ่งข้อมูล: แบบช่วง แบบแฮช และแบบไดเรกทอรี” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. กลยุทธ์การแบ่งข้อมูล: แบบช่วง แบบแฮช และแบบไดเรกทอรี
  2. คำสั่งค้นหาข้ามส่วนข้อมูล: ปัญหาที่ยากที่สุด
  3. Citus และ Postgres แบบกระจาย
  4. เมื่อใดไม่ควรแบ่งข้อมูล
← กลับไปที่ SQL Academy