“สร้างฐานข้อมูลของคุณเอง! คู่มือสร้าง Key-Value Database ตั้งแต่ศูนย์ – เข้าใจง่าย พร้อมแนวคิดระดับมืออาชีพ”
บทความนี้จาก nan.fyi พาเราย้อนกลับไปตั้งคำถามว่า “ถ้าเราไม่รู้จักฐานข้อมูลเลย แล้วต้องสร้างมันขึ้นมาเอง จะเริ่มยังไง?” คำตอบคือเริ่มจากสิ่งที่เรียบง่ายที่สุด: ไฟล์ และแนวคิดของ key-value pair เหมือน object ใน JavaScript
เริ่มต้นจากการเขียนข้อมูลลงไฟล์แบบง่าย ๆ เช่น db set 'hello' 'world' แล้วค้นหาด้วย db get 'hello' ซึ่งจะคืนค่า 'world' กลับมา แต่เมื่อข้อมูลมากขึ้น การอัปเดตและลบข้อมูลในไฟล์จะเริ่มช้า เพราะต้องเลื่อนข้อมูลทั้งหมดตาม byte ที่เปลี่ยน
เพื่อแก้ปัญหานี้ บทความเสนอให้ใช้ ไฟล์แบบ append-only คือไม่แก้ไขข้อมูลเดิม แต่เพิ่มข้อมูลใหม่ลงท้ายไฟล์เสมอ และใช้ “tombstone” เพื่อระบุว่าข้อมูลถูกลบแล้ว เช่น db set 7 null
แต่ไฟล์จะโตขึ้นเรื่อย ๆ จึงต้องมีระบบ compaction คือแบ่งไฟล์เป็น segment และค่อย ๆ ล้างข้อมูลที่ไม่จำเป็นออก แล้วรวมไฟล์ใหม่ให้เล็กลง
ต่อมาเพื่อให้ค้นหาข้อมูลเร็วขึ้น ก็ต้องมี index โดยเก็บ offset ของแต่ละ key เพื่อชี้ตำแหน่งในไฟล์ ซึ่งช่วยให้ค้นหาเร็วขึ้นมาก แต่ก็แลกกับการเขียนข้อมูลที่ช้าลง
สุดท้าย บทความแนะนำให้ใช้ Sorted String Tables (SST) และ LSM Trees ซึ่งเป็นโครงสร้างที่ใช้จริงในฐานข้อมูลระดับโลก เช่น LevelDB และ DynamoDB โดยใช้การจัดเรียงข้อมูลใน memory ก่อน แล้วค่อยเขียนลง disk พร้อม index เพื่อให้ค้นหาเร็วและเขียนได้ต่อเนื่อง
แนวคิดพื้นฐานของ Key-Value Database
ใช้ไฟล์เก็บข้อมูลแบบ key-value
ค้นหาด้วยการวนลูปหา key ที่ตรง
อัปเดตและลบข้อมูลทำได้ แต่ช้าเมื่อข้อมูลเยอะ
การปรับปรุงด้วยไฟล์แบบ append-only
เพิ่มข้อมูลใหม่ลงท้ายไฟล์เสมอ
ใช้ tombstone เพื่อระบุการลบ
ค้นหาค่าล่าสุดของ key แทนค่าตัวแรก
การจัดการขนาดไฟล์ด้วย compaction
แบ่งไฟล์เป็น segment
ล้างข้อมูลที่ล้าสมัยหรือถูกลบ
รวมไฟล์ใหม่ให้เล็กลงและมีข้อมูลล่าสุดเท่านั้น
การเพิ่มประสิทธิภาพด้วย index
เก็บ offset ของ key เพื่อค้นหาเร็วขึ้น
ใช้ hash table ใน memory สำหรับ index
แลกกับการเขียนข้อมูลที่ช้าลง
การจัดเรียงข้อมูลด้วย SST และ LSM Tree
จัดเรียงข้อมูลใน memory ก่อนเขียนลง disk
ใช้ skip list หรือ binary search tree สำหรับการจัดเรียง
เขียนลงไฟล์แบบ append-only พร้อม backup
ใช้ index เพื่อค้นหาในไฟล์ที่ถูกจัดเรียงแล้ว
เป็นโครงสร้างที่ใช้ใน LevelDB และ DynamoDB
https://www.nan.fyi/database
บทความนี้จาก nan.fyi พาเราย้อนกลับไปตั้งคำถามว่า “ถ้าเราไม่รู้จักฐานข้อมูลเลย แล้วต้องสร้างมันขึ้นมาเอง จะเริ่มยังไง?” คำตอบคือเริ่มจากสิ่งที่เรียบง่ายที่สุด: ไฟล์ และแนวคิดของ key-value pair เหมือน object ใน JavaScript
เริ่มต้นจากการเขียนข้อมูลลงไฟล์แบบง่าย ๆ เช่น db set 'hello' 'world' แล้วค้นหาด้วย db get 'hello' ซึ่งจะคืนค่า 'world' กลับมา แต่เมื่อข้อมูลมากขึ้น การอัปเดตและลบข้อมูลในไฟล์จะเริ่มช้า เพราะต้องเลื่อนข้อมูลทั้งหมดตาม byte ที่เปลี่ยน
เพื่อแก้ปัญหานี้ บทความเสนอให้ใช้ ไฟล์แบบ append-only คือไม่แก้ไขข้อมูลเดิม แต่เพิ่มข้อมูลใหม่ลงท้ายไฟล์เสมอ และใช้ “tombstone” เพื่อระบุว่าข้อมูลถูกลบแล้ว เช่น db set 7 null
แต่ไฟล์จะโตขึ้นเรื่อย ๆ จึงต้องมีระบบ compaction คือแบ่งไฟล์เป็น segment และค่อย ๆ ล้างข้อมูลที่ไม่จำเป็นออก แล้วรวมไฟล์ใหม่ให้เล็กลง
ต่อมาเพื่อให้ค้นหาข้อมูลเร็วขึ้น ก็ต้องมี index โดยเก็บ offset ของแต่ละ key เพื่อชี้ตำแหน่งในไฟล์ ซึ่งช่วยให้ค้นหาเร็วขึ้นมาก แต่ก็แลกกับการเขียนข้อมูลที่ช้าลง
สุดท้าย บทความแนะนำให้ใช้ Sorted String Tables (SST) และ LSM Trees ซึ่งเป็นโครงสร้างที่ใช้จริงในฐานข้อมูลระดับโลก เช่น LevelDB และ DynamoDB โดยใช้การจัดเรียงข้อมูลใน memory ก่อน แล้วค่อยเขียนลง disk พร้อม index เพื่อให้ค้นหาเร็วและเขียนได้ต่อเนื่อง
แนวคิดพื้นฐานของ Key-Value Database
ใช้ไฟล์เก็บข้อมูลแบบ key-value
ค้นหาด้วยการวนลูปหา key ที่ตรง
อัปเดตและลบข้อมูลทำได้ แต่ช้าเมื่อข้อมูลเยอะ
การปรับปรุงด้วยไฟล์แบบ append-only
เพิ่มข้อมูลใหม่ลงท้ายไฟล์เสมอ
ใช้ tombstone เพื่อระบุการลบ
ค้นหาค่าล่าสุดของ key แทนค่าตัวแรก
การจัดการขนาดไฟล์ด้วย compaction
แบ่งไฟล์เป็น segment
ล้างข้อมูลที่ล้าสมัยหรือถูกลบ
รวมไฟล์ใหม่ให้เล็กลงและมีข้อมูลล่าสุดเท่านั้น
การเพิ่มประสิทธิภาพด้วย index
เก็บ offset ของ key เพื่อค้นหาเร็วขึ้น
ใช้ hash table ใน memory สำหรับ index
แลกกับการเขียนข้อมูลที่ช้าลง
การจัดเรียงข้อมูลด้วย SST และ LSM Tree
จัดเรียงข้อมูลใน memory ก่อนเขียนลง disk
ใช้ skip list หรือ binary search tree สำหรับการจัดเรียง
เขียนลงไฟล์แบบ append-only พร้อม backup
ใช้ index เพื่อค้นหาในไฟล์ที่ถูกจัดเรียงแล้ว
เป็นโครงสร้างที่ใช้ใน LevelDB และ DynamoDB
https://www.nan.fyi/database
🗃️ “สร้างฐานข้อมูลของคุณเอง! คู่มือสร้าง Key-Value Database ตั้งแต่ศูนย์ – เข้าใจง่าย พร้อมแนวคิดระดับมืออาชีพ”
บทความนี้จาก nan.fyi พาเราย้อนกลับไปตั้งคำถามว่า “ถ้าเราไม่รู้จักฐานข้อมูลเลย แล้วต้องสร้างมันขึ้นมาเอง จะเริ่มยังไง?” คำตอบคือเริ่มจากสิ่งที่เรียบง่ายที่สุด: ไฟล์ และแนวคิดของ key-value pair เหมือน object ใน JavaScript
เริ่มต้นจากการเขียนข้อมูลลงไฟล์แบบง่าย ๆ เช่น db set 'hello' 'world' แล้วค้นหาด้วย db get 'hello' ซึ่งจะคืนค่า 'world' กลับมา แต่เมื่อข้อมูลมากขึ้น การอัปเดตและลบข้อมูลในไฟล์จะเริ่มช้า เพราะต้องเลื่อนข้อมูลทั้งหมดตาม byte ที่เปลี่ยน
เพื่อแก้ปัญหานี้ บทความเสนอให้ใช้ ไฟล์แบบ append-only คือไม่แก้ไขข้อมูลเดิม แต่เพิ่มข้อมูลใหม่ลงท้ายไฟล์เสมอ และใช้ “tombstone” เพื่อระบุว่าข้อมูลถูกลบแล้ว เช่น db set 7 null
แต่ไฟล์จะโตขึ้นเรื่อย ๆ จึงต้องมีระบบ compaction คือแบ่งไฟล์เป็น segment และค่อย ๆ ล้างข้อมูลที่ไม่จำเป็นออก แล้วรวมไฟล์ใหม่ให้เล็กลง
ต่อมาเพื่อให้ค้นหาข้อมูลเร็วขึ้น ก็ต้องมี index โดยเก็บ offset ของแต่ละ key เพื่อชี้ตำแหน่งในไฟล์ ซึ่งช่วยให้ค้นหาเร็วขึ้นมาก แต่ก็แลกกับการเขียนข้อมูลที่ช้าลง
สุดท้าย บทความแนะนำให้ใช้ Sorted String Tables (SST) และ LSM Trees ซึ่งเป็นโครงสร้างที่ใช้จริงในฐานข้อมูลระดับโลก เช่น LevelDB และ DynamoDB โดยใช้การจัดเรียงข้อมูลใน memory ก่อน แล้วค่อยเขียนลง disk พร้อม index เพื่อให้ค้นหาเร็วและเขียนได้ต่อเนื่อง
✅ แนวคิดพื้นฐานของ Key-Value Database
➡️ ใช้ไฟล์เก็บข้อมูลแบบ key-value
➡️ ค้นหาด้วยการวนลูปหา key ที่ตรง
➡️ อัปเดตและลบข้อมูลทำได้ แต่ช้าเมื่อข้อมูลเยอะ
✅ การปรับปรุงด้วยไฟล์แบบ append-only
➡️ เพิ่มข้อมูลใหม่ลงท้ายไฟล์เสมอ
➡️ ใช้ tombstone เพื่อระบุการลบ
➡️ ค้นหาค่าล่าสุดของ key แทนค่าตัวแรก
✅ การจัดการขนาดไฟล์ด้วย compaction
➡️ แบ่งไฟล์เป็น segment
➡️ ล้างข้อมูลที่ล้าสมัยหรือถูกลบ
➡️ รวมไฟล์ใหม่ให้เล็กลงและมีข้อมูลล่าสุดเท่านั้น
✅ การเพิ่มประสิทธิภาพด้วย index
➡️ เก็บ offset ของ key เพื่อค้นหาเร็วขึ้น
➡️ ใช้ hash table ใน memory สำหรับ index
➡️ แลกกับการเขียนข้อมูลที่ช้าลง
✅ การจัดเรียงข้อมูลด้วย SST และ LSM Tree
➡️ จัดเรียงข้อมูลใน memory ก่อนเขียนลง disk
➡️ ใช้ skip list หรือ binary search tree สำหรับการจัดเรียง
➡️ เขียนลงไฟล์แบบ append-only พร้อม backup
➡️ ใช้ index เพื่อค้นหาในไฟล์ที่ถูกจัดเรียงแล้ว
➡️ เป็นโครงสร้างที่ใช้ใน LevelDB และ DynamoDB
https://www.nan.fyi/database
0 ความคิดเห็น
0 การแบ่งปัน
27 มุมมอง
0 รีวิว