6 poin oleh GN⁺ 2024-04-10 | 1 komentar | Bagikan ke WhatsApp
  • Mesin database kompatibel MySQL yang ditulis murni dalam Go
  • Mesin SQL yang tidak bergantung pada sumber data tertentu, dan mengeksekusi kueri terhadap sumber data yang diberikan menggunakan sintaks dan protokol MySQL
  • Menyertakan implementasi database in-memory sederhana, dan Anda dapat mengimplementasikan backend sendiri untuk mengkueri sumber data yang diinginkan

Kompatibilitas

  • Dengan pengecualian beberapa batasan tertentu, go-mysql-server dapat digunakan sebagai pengganti MySQL
  • Library klien, alat, kueri, sintaks SQL, dan fungsi SQL yang berjalan di MySQL seharusnya juga berjalan di go-mysql-server
  • Jika menemukan perbedaan fitur, mohon laporkan issue

Cakupan proyek

  • Server dan mesin SQL untuk mengkueri sumber data
  • Implementasi backend database in-memory yang cocok digunakan untuk pengujian
  • Antarmuka yang dapat digunakan untuk mengimplementasikan backend baru guna mengkueri sumber data Anda sendiri
  • Dengan mempertimbangkan beberapa catatan penting dan menggunakan implementasi database secara penuh, ini dapat menggantikan database MySQL

Kasus penggunaan utama go-mysql-server:

  1. Menggantikan MySQL di lingkungan pengujian Go dengan menggunakan implementasi database memory bawaan
  2. Memungkinkan akses SQL query ke sumber data apa pun dengan mengimplementasikan beberapa antarmuka

Menggunakan server uji in-memory

  • Server uji in-memory dapat menggantikan server MySQL nyata dalam pengujian
  • Anda dapat memulai server menggunakan kode contoh yang disediakan
  • Setelah server berjalan, Anda dapat terhubung menggunakan klien MySQL, konektor MySQL untuk Go, shell mysql, dan sebagainya

Batasan implementasi database in-memory

  • Implementasi database in-memory yang disertakan dimaksudkan untuk digunakan untuk pengujian
  • Batasan yang diketahui:
    • Tidak thread-safe. Untuk menghindari masalah konkurensi, pernyataan DDL dan DML harus dibatasi ke satu goroutine
    • Tidak mendukung transaksi. Pernyataan seperti START TRANSACTION, ROLLBACK, dan COMMIT tidak akan berfungsi
    • Implementasi indeks yang tidak efisien. Pencarian indeks dan join melakukan full table scan pada tabel internal

Implementasi backend kustom

  • Anda dapat membuat backend untuk mengkueri sumber data Anda sendiri dengan mengimplementasikan beberapa antarmuka
  • Untuk petunjuk rinci, lihat panduan backend

Proyek yang ditenagai oleh go-mysql-server

  • dolt
  • gitbase (dihentikan)
  • Jika Anda sedang membangun backend database dengan go-mysql-server, mohon beri tahu

Lisensi

  • Apache License 2.0

Pendapat GN⁺

  • go-mysql-server tampak seperti mesin database ringan yang kompatibel dengan MySQL dan ditulis dalam Go, berguna untuk menggantikan MySQL di lingkungan pengujian atau untuk mengkueri sumber data sendiri dengan SQL
  • Karena menargetkan kompatibilitas MySQL, diharapkan dapat diterapkan pada aplikasi berbasis MySQL yang sudah ada tanpa banyak modifikasi
  • Namun, ini masih merupakan proyek eksperimental, dan khususnya implementasi in-memory hanya untuk pengujian, sehingga perlu kehati-hatian dari sisi performa dan stabilitas saat digunakan di produksi
  • Bagi pengembang backend, daya tariknya adalah kemampuan untuk mengimplementasikan sendiri antarmuka guna menghubungkan sumber data yang diinginkan. Akan baik untuk merujuk pada contoh proyek nyata seperti Dolt
  • Database kompatibel MySQL serupa antara lain TiDB dan CockroachDB. Berbeda dari keduanya, go-mysql-server memiliki keunggulan karena backend dapat diimplementasikan secara bebas, tetapi di sisi lain ada kekurangan berupa biaya tambahan untuk pengembangan backend

1 komentar

 
GN⁺ 2024-04-10
Komentar Hacker News
  • Sebagai mesin kueri yang menjalankan Dolt, go-mysql-server adalah bagian yang paling penting
  • Saya menulis sebagian besar kode Dolt, tetapi bukan penulis aslinya. Kisah latar belakang awal proyek ini menarik
  • Ide Dolt menarik, tetapi lapisan persistensinya terlalu berbeda dan terlalu penting sehingga kurang memadai untuk membangun bisnis di atasnya. Namun akan bagus jika DB arus utama mengadopsinya
  • Jika dukungan berkembang dari MySQL ke PostgreSQL dan SQLite, maka dukungan multi-mesin DB akan dimungkinkan di WordPress dan lainnya
  • Ini tampak seperti proxy wire-protocol dari MySQL ke SQL. DB proxied default-nya adalah Dolt, dan tampaknya proyek ini diekstrak dari Dolt
  • Go mungkin bisa lebih baik, tetapi dari sudut pandang pengembang C#, mengimplementasikan DB dalam bahasa GC terasa mengkhawatirkan. Kita harus terus melawan GC dan menulis banyak kode low allocation yang tidak jelas. Ini mungkin cocok untuk tim kecil, tetapi akan sulit merekrut pengembang dengan keterampilan yang tepat
  • Kompatibilitas dan fiturnya sangat terbatas sehingga sulit digunakan di produksi (tidak mendukung transaksi, implementasi indeks tidak efisien, dll.). Saya juga penasaran apakah trigger, stored procedure, dan sebagainya didukung
  • Saya penasaran seberapa sulit menggunakannya sebagai pengganti in-memory untuk MySQL guna menguji proyek Rails. Karena lapisan DB itu penting, perlu berhati-hati di produksi, tetapi jika bisa mempercepat pengujian, ini akan menarik
  • TiDB adalah DB terdistribusi yang kompatibel dengan MySQL dan ditulis dengan Go dan Rust, sedangkan StarRocks adalah DB kompatibel MySQL untuk OLAP yang ditulis dengan Java dan C++. Namun proyek ini tampaknya membahas sudut pandang yang berbeda. Karena pustaka MySQL Vitess sulit digunakan, mungkin ini bisa dipakai untuk membangun lapisan abstraksi seperti ORM
  • Implementasi seperti ini memang mengagumkan, tetapi saya ragu apakah ada kasus penggunaan nyata
  • Ada usulan: bagaimana kalau mematuhi SQL standar alih-alih MySQL