พื้นฐานของฐานข้อมูล
(tontinton.com)พื้นฐานของ bashdb
bashdbซึ่งเป็นโปรแกรมฐานข้อมูลที่ง่ายที่สุด ประกอบด้วยฟังก์ชัน bash สองตัว- ฟังก์ชัน
db_setจะเพิ่มข้อมูลลงในไฟล์ และฟังก์ชันdb_getจะค้นหาข้อมูล - ปัญหาของ
bashdbได้แก่ ความทนทาน อะตอมมิกซิตี การแยกตัว และประสิทธิภาพ
ปรับปรุง bashdb ให้เป็น ACID
- ACID คือคุณสมบัติของทรานแซ็กชันฐานข้อมูล ซึ่งหมายถึง อะตอมมิกซิตี ความสอดคล้อง การแยกตัว และความทนทาน
- เพื่อปรับปรุงความทนทานของ
bashdbจึงเพิ่มคำสั่งsyncเข้าไปในdb_set - เพื่อการแยกตัว มีการเพิ่มการล็อกไฟล์โดยใช้โปรแกรม
flock
ความทนทาน
fsyncและfdatasyncเป็น system call ที่ใช้ flush write buffer ลงดิสก์- คำสั่ง
syncจะ flush หน้าหน่วยความจำที่ "สกปรก" ทั้งหมดลงดิสก์ และแฟล็ก-dจะเรียกfdatasync
การแยกตัว
- ใช้
flockเพื่อให้bashdbรองรับการแยกตัวระหว่างหลายโปรเซส flockเป็นโปรแกรมลินุกซ์สำหรับการล็อกไฟล์ โดยใช้แฟล็ก-sเพื่ออนุญาตให้อ่านพร้อมกันได้
ข่าวร้าย
- ยังไม่พบวิธีง่าย ๆ ในการรับประกันอะตอมมิกซิตีด้วย
bashdb - เพื่อเพิ่มประสิทธิภาพ จำเป็นต้องปรับปรุงอัลกอริทึม
O(n)
Storage Engine
- จุดประสงค์ของ storage engine คือการให้นามธรรมสำหรับการอ่านและเขียนข้อมูลลง persistent storage
- การออกแบบ storage engine มีเป้าหมายเพื่อลด disk I/O และ disk seek ให้น้อยที่สุด
Mutable B-Tree
- B-Tree เป็นรูปแบบดัดแปลงของ BST ที่มี spatial locality ซึ่งช่วยลด disk I/O และการ seek
- B-Tree คือ BST ที่ถูกทำให้เป็นแบบทั่วไปเพื่อให้โหนดมีลูกได้มากขึ้น
Immutable LSM Tree
- LSM Tree เป็นโครงสร้างข้อมูลแบบ immutable ที่เขียนแบบลำดับต่อเนื่อง ซึ่งเหมาะกับ workload ที่เน้นการเขียน
- LSM Tree จะบัฟเฟอร์ข้อมูลไว้ในหน่วยความจำ และเมื่อถึงขนาดที่กำหนดจะ flush ออกมาเป็น SSTable ที่เรียงลำดับแล้ว
Bloom Filter
- Bloom Filter เป็นโครงสร้างข้อมูลเชิงความน่าจะเป็นที่ใช้ตรวจสอบได้อย่างมีประสิทธิภาพว่ารายการหนึ่งไม่มีอยู่ในเซต
- Bloom Filter ทำงานโดยใช้ฟังก์ชันแฮช และมีความซับซ้อนเชิงพื้นที่เป็น
O(log n)
Write Ahead Log
- WAL เป็นไฟล์พิเศษที่บันทึกการทำงานของทรานแซ็กชันทั้งหมด และใช้สร้างสถานะขึ้นใหม่เมื่อโปรเซสฐานข้อมูลเริ่มทำงาน
การแยกตัว
- เพื่อให้เกิดการแยกตัว สามารถใช้ pessimistic locking, optimistic locking หรือ MVCC ได้
- มาตรฐาน ANSI/ISO SQL 92 ได้กำหนดระดับการแยกตัวของการอ่านหลายระดับ
ระบบกระจาย
- ระบบกระจายเพิ่มความซับซ้อน แต่สามารถกระจายข้อมูลไปยังหลายเครื่องเพื่อให้ได้ความพร้อมใช้งานและการขยายระบบในแนวนอน
- ตามทฤษฎี CAP ระบบสามารถรับประกันได้เพียงสองในสามอย่างจาก ความสอดคล้อง ความพร้อมใช้งาน และความทนทานต่อการแบ่งเครือข่าย
Consistent Hashing
- Consistent Hashing เป็นวิธีแบ่งข้อมูลที่ช่วยลดปริมาณรายการที่ต้องย้ายเมื่อมีการเพิ่มหรือลบโหนด
ความเห็นของ GN⁺:
- ความเข้าใจเกี่ยวกับปัญหาพื้นฐานของฐานข้อมูลและคุณสมบัติ ACID เป็นแกนหลักของวิศวกรรมฐานข้อมูล
- ตัวอย่าง
bashdbช่วยให้เข้าใจปัญหาที่เกิดขึ้นจริงในระบบฐานข้อมูลได้ดี - การออกแบบ storage engine และระบบกระจายเป็นปัจจัยสำคัญที่กำหนดประสิทธิภาพและความน่าเชื่อถือของฐานข้อมูล
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
สรุปความคิดเห็นแรก:
สรุปความคิดเห็นที่สอง:
สรุปความคิดเห็นที่สาม:
สรุปความคิดเห็นที่สี่:
สรุปความคิดเห็นที่ห้า:
สรุปความคิดเห็นที่หก:
สรุปความคิดเห็นที่เจ็ด:
sync; mv; syncสรุปความคิดเห็นที่แปด:
สรุปความคิดเห็นที่เก้า:
สรุปความคิดเห็นที่สิบ: