- เอนจินฐานข้อมูลที่เข้ากันได้กับ MySQL ซึ่งเขียนด้วย Go ล้วน
- เป็นเอนจิน SQL ที่ไม่ยึดติดกับแหล่งข้อมูลใดแหล่งข้อมูลหนึ่ง และใช้ไวยากรณ์กับโปรโตคอลของ MySQL เพื่อรันคิวรีกับแหล่งข้อมูลที่กำหนด
- มาพร้อม implementation ของฐานข้อมูล in-memory แบบเรียบง่าย และสามารถสร้างแบ็กเอนด์ของตนเองเพื่อคิวรีแหล่งข้อมูลที่ต้องการได้
ความเข้ากันได้
- ยกเว้นข้อจำกัดบางประการ go-mysql-server สามารถใช้แทน MySQL ได้
- ไลบรารีไคลเอนต์ เครื่องมือ คิวรี ไวยากรณ์ SQL และฟังก์ชัน SQL ที่ทำงานบน MySQL ควรจะทำงานบน go-mysql-server ได้เช่นกัน
- หากพบความแตกต่างของฟีเจอร์ โปรดรายงานเป็น issue
ขอบเขตของโปรเจ็กต์
- เซิร์ฟเวอร์และเอนจิน SQL สำหรับคิวรีแหล่งข้อมูล
- implementation ของแบ็กเอนด์ฐานข้อมูล in-memory ที่เหมาะสำหรับใช้ในการทดสอบ
- อินเทอร์เฟซที่สามารถใช้สร้าง implementation ของแบ็กเอนด์ใหม่ เพื่อคิวรีแหล่งข้อมูลของตนเอง
- หากคำนึงถึงข้อควรระวังบางอย่างและใช้ implementation ฐานข้อมูลแบบเต็ม ก็สามารถใช้แทนฐานข้อมูล MySQL ได้
กรณีใช้งานหลักของ go-mysql-server:
- ใช้ implementation ฐานข้อมูล
memory ที่มีมาให้ในตัวเพื่อแทน MySQL ในสภาพแวดล้อมการทดสอบของ Go
- ทำให้เข้าถึงแหล่งข้อมูลใดก็ได้ผ่าน SQL query โดยการ implement อินเทอร์เฟซบางส่วน
การใช้เซิร์ฟเวอร์ทดสอบ in-memory
- เซิร์ฟเวอร์ทดสอบ in-memory สามารถใช้แทนเซิร์ฟเวอร์ MySQL จริงในการทดสอบได้
- สามารถเริ่มเซิร์ฟเวอร์ได้ด้วยโค้ดตัวอย่างที่ให้มา
- เมื่อเซิร์ฟเวอร์ทำงานแล้ว จะเชื่อมต่อได้ผ่าน MySQL client, Go MySQL connector หรือ
mysql shell เป็นต้น
ข้อจำกัดของ implementation ฐานข้อมูล in-memory
- implementation ฐานข้อมูล in-memory ที่ให้มานั้นมีไว้เพื่อใช้สำหรับการทดสอบ
- ข้อจำกัดที่ทราบแล้ว:
- ไม่ thread-safe เพื่อหลีกเลี่ยงปัญหาด้าน concurrency ควรจำกัดคำสั่ง DDL และ DML ให้อยู่ใน goroutine เดียว
- ไม่รองรับ transaction คำสั่งอย่าง
START TRANSACTION, ROLLBACK, COMMIT จะไม่ทำงาน
- implementation ของดัชนีไม่มีประสิทธิภาพ การค้นหาด้วยดัชนีและการ join จะทำ full table scan กับตารางภายใน
การสร้างแบ็กเอนด์แบบกำหนดเอง
- สามารถสร้างแบ็กเอนด์สำหรับคิวรีแหล่งข้อมูลของตนเองได้โดย implement อินเทอร์เฟซบางส่วน
- ดูคำแนะนำโดยละเอียดได้จากคู่มือแบ็กเอนด์
โปรเจ็กต์ที่ขับเคลื่อนด้วย go-mysql-server
- dolt
- gitbase (ยุติการพัฒนาแล้ว)
- หากกำลังสร้างแบ็กเอนด์ฐานข้อมูลด้วย go-mysql-server โปรดแจ้งให้ทราบ
ไลเซนส์
ความเห็นของ GN⁺
- go-mysql-server เป็นเอนจินฐานข้อมูลขนาดเบาที่เข้ากันได้กับ MySQL และเขียนด้วย Go ซึ่งดูมีประโยชน์สำหรับการใช้แทน MySQL ในสภาพแวดล้อมทดสอบ หรือสำหรับคิวรีแหล่งข้อมูลแบบกำหนดเองด้วย SQL
- เนื่องจากมุ่งเป้าไปที่ความเข้ากันได้กับ MySQL จึงคาดว่าน่าจะนำไปใช้กับแอปพลิเคชันที่อิง MySQL เดิมได้โดยไม่ต้องแก้ไขมาก
- อย่างไรก็ตาม โปรเจ็กต์นี้ยังอยู่ในช่วงทดลอง โดยเฉพาะ implementation แบบ in-memory ที่ยังเหมาะกับงานทดสอบเท่านั้น ดังนั้นหากจะใช้ใน production ก็ควรระวังเรื่องประสิทธิภาพและความเสถียร
- สำหรับนักพัฒนาแบ็กเอนด์ ความสามารถในการ implement อินเทอร์เฟซด้วยตนเองเพื่อเชื่อมต่อแหล่งข้อมูลที่ต้องการน่าจะเป็นจุดที่น่าสนใจ ควรดูตัวอย่างจากโปรเจ็กต์จริงอย่าง Dolt
- ฐานข้อมูลที่เข้ากันได้กับ MySQL ในลักษณะใกล้เคียงกันมี TiDB, CockroachDB เป็นต้น แต่ go-mysql-server มีข้อดีตรงที่สามารถสร้างแบ็กเอนด์ได้อย่างอิสระ ขณะเดียวกันก็มีข้อเสียคือมีต้นทุนเพิ่มเติมในการพัฒนาแบ็กเอนด์
1 ความคิดเห็น
ความคิดเห็นบน Hacker News