โครงการฐานข้อมูลการศึกษา toyDB ได้รับการยอมรับในการสอนแนวคิด Distributed SQL

BigGo Editorial Team
โครงการฐานข้อมูลการศึกษา toyDB ได้รับการยอมรับในการสอนแนวคิด Distributed SQL

ในโลกของเทคโนโลยีฐานข้อมูล แหล่งเรียนรู้ที่สมดุลระหว่างคุณค่าทางการศึกษาและการนำไปใช้งานจริงนั้นหายาก โครงการ toyDB ของ Erik Grinaker ได้รับความสนใจในชุมชนนักพัฒนาเมื่อเร็วๆ นี้ ในฐานะเครื่องมือการศึกษาที่ครอบคลุมสำหรับการทำความเข้าใจสถาปัตยกรรมฐานข้อมูล distributed SQL

โครงการนี้ซึ่งเขียนขึ้นครั้งแรกในปี 2020 และได้รับการเขียนใหม่ตามประสบการณ์การทำงานของผู้เขียนที่ CockroachDB และ Neon ทำหน้าที่เป็นตัวอย่างที่ใช้งานได้จริงแต่ถูกทำให้ง่ายขึ้นของแนวคิดฐานข้อมูล distributed SQL สิ่งที่ทำให้ toyDB มีคุณค่าเป็นพิเศษคือการเน้นที่ความชัดเจนและความถูกต้องมากกว่าประสิทธิภาพหรือความสามารถในการขยายขนาด

สถาปัตยกรรมและคุณสมบัติ

toyDB ใช้สถาปัตยกรรมแบบคลาสสิกสำหรับฐานข้อมูล distributed SQL โดยมีโปรโตคอล Raft consensus สำหรับการทำ linearizable state machine replication, ธุรกรรม ACID ด้วย snapshot isolation แบบ MVCC และเครื่องมือประมวลผลคำสั่ง SQL โครงสร้างของโครงการนี้เป็นไปตามโมเดล Volcano แบบดั้งเดิม ซึ่งเป็นหลักในการออกแบบฐานข้อมูลมาหลายทศวรรษ

ผู้แสดงความคิดเห็นคนหนึ่งได้เน้นย้ำถึงคุณค่าทางการศึกษาของโค้ด:

ผมได้เรียนรู้มากมายจากการศึกษาโค้ดของคุณและพยายามนำไปใช้โดยอ้างอิงจากโค้ดของคุณ โดยเฉพาะในส่วนของ Raft ตั้งตารอที่จะทำแบบนี้อีกครั้ง เป็นงานที่ยอดเยี่ยมมาก

เอกสารประกอบของโครงการนี้รวมถึงคู่มือสถาปัตยกรรม ตัวอย่าง SQL และเอกสารอ้างอิง ทำให้เข้าถึงได้ง่ายสำหรับผู้ที่ต้องการทำความเข้าใจกลไกภายในของฐานข้อมูล วิธีการที่ครอบคลุมนี้ได้รับคำชมจากสมาชิกในชุมชนที่ชื่นชมทั้งการนำไปใช้ทางเทคนิคและคำอธิบายที่ชัดเจน

คุณสมบัติหลักของ toyDB

  • การใช้ Raft distributed consensus สำหรับการทำ linearizable state machine replication
  • การทำธุรกรรมแบบ ACID ด้วย MVCC-based snapshot isolation
  • กลไกการจัดเก็บข้อมูลแบบปลั๊กอินได้ ด้วย BitCask และแบ็กเอนด์แบบในหน่วยความจำ
  • เครื่องมือสืบค้นข้อมูลแบบ Iterator พร้อมการปรับประสิทธิภาพแบบ heuristic
  • อินเตอร์เฟซ SQL รวมถึงการทำ joins, aggregates และธุรกรรมต่างๆ

ประสิทธิภาพการทดสอบ

การทำงาน BitCask BitCask ไม่ใช้ fsync หน่วยความจำ
อ่าน 14163 txn/s 13941 txn/s 13949 txn/s
เขียน 35 txn/s 4719 txn/s 7781 txn/s
bank 21 txn/s 1120 txn/s 1346 txn/s

หมายเหตุ: ประสิทธิภาพการเขียนถูกระบุว่า "แย่มาก" เมื่อเปิดใช้งาน fsync แต่จะดีขึ้นอย่างมีนัยสำคัญเมื่อปิดการใช้งานหรือเมื่อใช้เครื่องมือแบบในหน่วยความจำ (แลกกับความคงทนของข้อมูล)

เครื่องมือการสอนและการถ่ายทอดความรู้

นอกเหนือจากการเป็นเพียงที่เก็บโค้ด toyDB ดูเหมือนจะทำหน้าที่เป็นเครื่องมือการสอนที่มีประสิทธิภาพ ความคิดเห็นหลายรายการเน้นย้ำถึงความสามารถของผู้เขียนในการถ่ายทอดแนวคิดที่ซับซ้อนในรูปแบบที่เข้าใจได้ นักศึกษาเก่าคนหนึ่งกล่าวถึงการมี Erik เป็นที่ปรึกษาวิทยานิพนธ์เกี่ยวกับฐานข้อมูลแบบกระจาย โดยสังเกตถึงประสิทธิภาพในฐานะครูผู้สอนควบคู่ไปกับความรู้ทางเทคนิค

ความสามารถในการอ่านโค้ดของโครงการนี้ก็ได้รับคำชมเช่นกัน โดยผู้ใช้อธิบายว่าโค้ดนั้นเป็นระเบียบและมีคำอธิบายประกอบที่ดี ความใส่ใจในความชัดเจนนี้สอดคล้องกับเป้าหมายทางการศึกษาของโครงการ ทำให้เข้าถึงได้ง่ายสำหรับผู้ที่ต้องการเรียนรู้เกี่ยวกับกลไกภายในของฐานข้อมูลโดยไม่ต้องเผชิญกับความซับซ้อนของระบบที่ใช้ในการผลิตจริง

ทิศทางในอนาคตและวิธีการทางเลือก

ที่น่าสนใจคือ การสนทนาในชุมชนได้หันไปสู่การขยายและวิธีการทางเลือกที่เป็นไปได้แล้ว ผู้แสดงความคิดเห็นคนหนึ่งถามเกี่ยวกับการใช้ toyDB เป็นคลังเก็บข้อมูลแบบ key-value อย่างง่ายโดยไม่ใช้ SQL ซึ่ง Erik ตอบว่าแม้จะเป็นไปได้ แต่จะต้องเขียน API เซิร์ฟเวอร์และไคลเอนต์แบบกำหนดเอง

นอกจากนี้ยังมีการพูดคุยเกี่ยวกับการสำรวจสถาปัตยกรรมทางเลือกนอกเหนือจากโมเดล Volcano แบบคลาสสิก Erik แสดงความสนใจในการสร้างบางสิ่งที่อิงตามโปรโตคอล Accord consensus จาก Cassandra สำหรับโครงการในอนาคต ซึ่งเน้นให้เห็นว่าโครงการเพื่อการศึกษาเช่น toyDB สามารถเป็นก้าวแรกสู่วิธีการที่มีนวัตกรรมมากขึ้นได้อย่างไร

แม้ว่า toyDB จะถูกออกแบบมาอย่างชัดเจนในฐานะเครื่องมือการศึกษามากกว่าฐานข้อมูลสำหรับการผลิตจริง แต่การนำแนวคิดหลักของฐานข้อมูลไปใช้อย่างละเอียดทำให้มีคุณค่าสำหรับทุกคนที่ต้องการทำความเข้าใจว่าฐานข้อมูล distributed SQL ทำงานอย่างไรภายใต้ฝากระโปรง โครงการนี้แสดงให้เห็นว่าทรัพยากรทางการศึกษาสามารถถูกต้องทางเทคนิคและเข้าถึงได้ง่าย เชื่อมช่องว่างระหว่างความรู้เชิงทฤษฎีและการนำไปใช้งานจริง

อ้างอิง: toyDB