บทที่ 06 · Key-Value Store

ออกแบบ Key-Value Store

Key-Value Store เป็นประเภทของ Non-relational Database ที่ข้อมูลถูกจัดเก็บเป็น Key-Value Pairs แต่ละ Key ไม่ซ้ำกัน และ Values ถูกเข้าถึงโดยใช้ Keys เหล่านี้

บทนำ

Key-Value Store เป็นประเภทของ Non-relational Database ที่ข้อมูลถูกจัดเก็บเป็น Key-Value Pairs แต่ละ Key ไม่ซ้ำกัน และ Values ถูกเข้าถึงโดยใช้ Keys เหล่านี้ บทนี้อธิบายวิธีออกแบบ Distributed Key-Value Store ที่รองรับ High Availability และ Scalability

Operations หลัก

CAP Theorem

CAP Theorem

ภาพที่ 1: CAP Theorem Triangle

Distributed Key-Value Store ต้องรับมือกับ Trade-offs ที่ระบุโดย CAP Theorem

C

Consistency
Clients เห็นข้อมูลเดียวกันพร้อมกัน

A

Availability
ระบบตอบสนองทุก Request

P

Partition Tolerance
ระบบทำงานต่อไปได้แม้ Network Partitions

Trade-off: ตาม CAP Theorem เฉพาะสองในสาม Guarantees สามารถบรรลุได้

ประเภทระบบ

ส่วนประกอบของระบบ

1. Data Partitioning

ใช้ Consistent Hashing กระจายข้อมูลข้าม Servers อย่างเท่าเทียม

2. Data Replication

จำลองข้อมูลข้าม N Servers เพื่อ High Availability

3. Consistency

Quorum Consensus:

การตั้งค่าทั่วไป:
  • R = 1, W = N: ระบบ Optimized สำหรับอ่านเร็ว
  • W = 1, R = N: ระบบ Optimized สำหรับเขียนเร็ว
  • W + R > N: Strong Consistency (ปกติ N = 3, W = R = 2)

4. Inconsistency Resolution

ใช้ Vector Clocks ติดตาม Data Versions และแก้ไข Conflicts

5. การจัดการ Failures

a. Failure Detection

Gossip Protocol:

b. Temporary Failures

Sloppy Quorum: ใช้ Healthy Nodes รักษา Operations ชั่วคราว

Hinted Handoff: Offline Servers ตาม kịp กับการเปลี่ยนแปลงเมื่อฟื้นตัว

c. Permanent Failures

ใช้ Merkle Trees สำหรับ Synchronization ที่มีประสิทธิภาพระหว่าง Replicas

Write และ Read Paths

Write Path

  1. Persist Write ใน Commit Log
  2. Save ข้อมูลใน Memory Cache
  3. Flush ข้อมูลไปยัง SSTable เมื่อ Cache เต็ม

Read Path

  1. ตรวจสอบ Memory Cache สำหรับข้อมูล
  2. หากไม่มี ใช้ Bloom Filter เพื่อหาตำแหน่งข้อมูลใน SSTables
  3. ดึงและส่งคืนข้อมูล

เนื้อหานี้อ้างอิงจาก ByteByteGo - System Design Interview - An Insider's Guide