6 puan yazan GN⁺ 2024-04-10 | 1 yorum | WhatsApp'ta paylaş
  • Tamamen Go ile yazılmış, MySQL uyumlu bir veritabanı motoru
  • Veri kaynağından bağımsız bir SQL motorudur; MySQL sözdizimi ve protokolünü kullanarak sağlanan veri kaynakları üzerinde sorgu çalıştırır
  • Basit bir bellek içi veritabanı uygulaması içerir ve kendi backend'inizi geliştirerek istediğiniz veri kaynağını sorgulayabilirsiniz

Uyumluluk

  • Belirli kısıtlamalar dışında, go-mysql-server MySQL'in yerine kullanılabilir
  • MySQL'de çalışan istemci kütüphaneleri, araçlar, sorgular, SQL sözdizimi ve SQL fonksiyonlarının go-mysql-server üzerinde de çalışması gerekir
  • Özellik farkları tespit ederseniz issue bildirmeniz istenir

Proje kapsamı

  • Veri kaynaklarını sorgulamak için bir SQL sunucusu ve motoru
  • Testlerde kullanıma uygun bir bellek içi veritabanı backend uygulaması
  • Kendi veri kaynağınızı sorgulamak için yeni backend uygulamalarında kullanılabilecek arayüzler
  • Bazı önemli noktalar dikkate alınır ve tam veritabanı uygulaması kullanılırsa MySQL veritabanının yerini alabilir

go-mysql-server'ın başlıca kullanım senaryoları:

  1. Yerleşik memory veritabanı uygulamasını kullanarak Go test ortamında MySQL'in yerine geçmek
  2. Birkaç arayüzü uygulayarak herhangi bir veri kaynağına SQL sorguları ile erişim sağlamak

Bellek içi test sunucusunun kullanımı

  • Bellek içi test sunucusu, testlerde gerçek MySQL sunucusunun yerini alabilir
  • Sağlanan örnek kod kullanılarak sunucu başlatılabilir
  • Sunucu çalıştıktan sonra MySQL istemcisi, Go MySQL connector'ü veya mysql shell gibi araçlarla bağlanılabilir

Bellek içi veritabanı uygulamasının kısıtları

  • Paketle birlikte gelen bellek içi veritabanı uygulaması test amaçlı kullanım içindir
  • Bilinen kısıtlar:
    • Thread-safe değildir. Eşzamanlılık sorunlarını önlemek için DDL ve DML ifadeleri tek bir goroutine ile sınırlandırılmalıdır
    • Transaction desteği yoktur. START TRANSACTION, ROLLBACK, COMMIT gibi ifadeler çalışmaz
    • Verimsiz indeks uygulaması. İndeks aramaları ve join işlemleri, dahili tablolar üzerinde tam tablo taraması yapar

Özel backend uygulama

  • Bazı arayüzleri uygulayarak kendi veri kaynağınızı sorgulayan bir backend oluşturabilirsiniz
  • Ayrıntılı yönergeler için backend rehberine bakın

go-mysql-server ile çalışan projeler

  • dolt
  • gitbase (durduruldu)
  • go-mysql-server ile bir veritabanı backend'i geliştiriyorsanız bunu bildirmeniz istenir

Lisans

  • Apache License 2.0

GN⁺ görüşü

  • go-mysql-server, Go ile yazılmış hafif bir MySQL uyumlu veritabanı motoru olarak, test ortamlarında MySQL'in yerine geçmek veya kendi veri kaynaklarını SQL ile sorgulamak için kullanışlı görünüyor
  • MySQL uyumluluğunu hedeflediği için mevcut MySQL tabanlı uygulamalara büyük değişiklikler yapmadan entegre edilebilmesi beklenebilir
  • Ancak proje hâlâ deneysel durumda; özellikle bellek içi uygulama yalnızca test amaçlı olduğundan, production kullanımında performans ve kararlılık açısından dikkat gerektiriyor
  • Backend geliştiricileri için, arayüzleri doğrudan uygulayarak istedikleri veri kaynağını bağlayabilmeleri çekici bir özellik olacaktır. Dolt gibi gerçek proje örneklerine bakmak faydalı olabilir
  • Benzer MySQL uyumlu veritabanları arasında TiDB ve CockroachDB bulunur. go-mysql-server, bunlardan farklı olarak backend'in serbestçe uygulanabilmesi avantajını sunarken, buna karşılık backend geliştirme için ek maliyet gerektirir

1 yorum

 
GN⁺ 2024-04-10
Hacker News yorumları
  • Dolt'u çalıştıran sorgu motoru olarak go-mysql-server en önemli parça
  • Dolt'un kodunun büyük kısmını yazdım ama asıl yazarı ben değilim. Projenin nasıl başladığına dair hikâye ilginç
  • Dolt fikri cazip, ancak çok farklı ve kritik bir persistence layer olduğu için üzerine iş kurmak açısından yetersiz. Yine de ana akım veritabanları bunu benimserse güzel olur
  • MySQL'den PostgreSQL ve SQLite'a desteğin gelişmesiyle WordPress gibi ortamlarda çoklu veritabanı motoru desteği mümkün olabilir
  • MySQL'den SQL'e bir wire-protocol proxy gibi görünüyor. Varsayılan olarak proxied DB Dolt ve muhtemelen Dolt'tan ayrıştırılmış
  • Go daha iyi olabilir, ancak bir C# geliştiricisi olarak GC kullanılan bir dilde veritabanı implemente etmek endişe verici geliyor. GC ile mücadele etmek ve bariz olmayan, düşük allocation'lı çok sayıda kod yazmak gerekecektir. Küçük ekipler için uygun olabilir ama doğru becerilere sahip geliştiricileri işe almak zor olacaktır
  • Uyumluluk ve özellikler çok sınırlı olduğu için production'da kullanmak zor görünüyor (transaction desteği yok, verimsiz index implementasyonu vb.). Trigger, stored procedure gibi özellikleri destekleyip desteklemediğini de merak ediyorum
  • Bir Rails projesini test etmek için MySQL'in in-memory bir alternatifi olarak kullanmanın ne kadar zor olacağını merak ediyorum. Veritabanı katmanı kritik olduğu için production'da dikkatli olmak gerekir, ama testleri hızlandırabilirse ilginç olabilir
  • TiDB, Go ve Rust ile yazılmış dağıtık bir MySQL uyumlu veritabanı; StarRocks ise Java ve C++ ile yazılmış, OLAP için MySQL uyumlu bir veritabanı. Ama bu proje farklı bir bakış açısını ele alıyor gibi görünüyor. Vitess MySQL kütüphanesini kullanmak zor olduğundan, belki ORM gibi bir soyutlama katmanı kurmak için kullanılabilir
  • Bu tür implementasyonları görünce etkileniyorum ama gerçekten pratik bir kullanım alanı var mı emin değilim
  • MySQL yerine standart SQL'e uyumlu olmasının daha iyi olup olmayacağı öneriliyor