- Eine MySQL-kompatible Datenbank-Engine, geschrieben in reinem Go
- Eine SQL-Engine, die nicht an eine bestimmte Datenquelle gebunden ist und Abfragen auf bereitgestellten Datenquellen mit MySQL-Syntax und -Protokoll ausführt
- Enthält eine einfache In-Memory-Datenbankimplementierung; durch Implementierung eines eigenen Backends lassen sich beliebige Datenquellen abfragen
Kompatibilität
- Abgesehen von bestimmten Einschränkungen kann go-mysql-server als Ersatz für MySQL verwendet werden
- Client-Bibliotheken, Tools, Abfragen, SQL-Syntax und SQL-Funktionen, die mit MySQL funktionieren, sollten auch mit go-mysql-server funktionieren
- Falls Funktionsunterschiede entdeckt werden, bitte ein Issue melden
Projektumfang
- SQL-Server und -Engine zum Abfragen von Datenquellen
- Eine In-Memory-Datenbank-Backend-Implementierung, die sich gut für Tests eignet
- Schnittstellen, die für die Implementierung neuer Backends zum Abfragen eigener Datenquellen verwendet werden können
- Unter Berücksichtigung einiger Hinweise und bei Verwendung einer vollständigen Datenbankimplementierung kann MySQL ersetzt werden
Wichtige Anwendungsfälle von go-mysql-server:
- Ersatz für MySQL in Go-Testumgebungen mithilfe der eingebauten
memory-Datenbankimplementierung
- Durch Implementierung einiger Schnittstellen kann auf beliebige Datenquellen per SQL-Abfrage zugegriffen werden
Verwendung des In-Memory-Testservers
- Der In-Memory-Testserver kann in Tests einen echten MySQL-Server ersetzen
- Der Server kann mit dem bereitgestellten Beispielcode gestartet werden
- Sobald der Server läuft, ist eine Verbindung über MySQL-Clients, Go-MySQL-Connectoren oder die
mysql-Shell möglich
Einschränkungen der In-Memory-Datenbankimplementierung
- Die mitgelieferte In-Memory-Datenbankimplementierung ist für den Einsatz in Tests gedacht
- Bekannte Einschränkungen:
- Nicht threadsicher. Um Nebenläufigkeitsprobleme zu vermeiden, sollten DDL- und DML-Anweisungen auf eine einzelne Goroutine beschränkt werden
- Unterstützt keine Transaktionen. Anweisungen wie
START TRANSACTION, ROLLBACK und COMMIT funktionieren nicht
- Ineffiziente Indeximplementierung. Index-Lookups und Joins führen bei internen Tabellen vollständige Tabellenscans durch
Implementierung benutzerdefinierter Backends
- Durch Implementierung einiger Schnittstellen kann ein Backend erstellt werden, das eigene Datenquellen abfragt
- Detaillierte Anweisungen finden sich im Backend-Guide
Projekte auf Basis von go-mysql-server
- dolt
- gitbase (eingestellt)
- Falls Sie ein Datenbank-Backend mit go-mysql-server entwickeln, lassen Sie es uns wissen
Lizenz
Meinung von GN⁺
- go-mysql-server wirkt wie eine leichtgewichtige, in Go geschriebene MySQL-kompatible Datenbank-Engine, die sich gut als MySQL-Ersatz in Testumgebungen oder zum Abfragen eigener Datenquellen per SQL eignet
- Da das Projekt auf MySQL-Kompatibilität abzielt, dürfte es sich voraussichtlich auch in bestehende MySQL-basierte Anwendungen integrieren lassen, ohne dass große Änderungen nötig sind
- Es handelt sich jedoch noch um ein experimentelles Projekt; insbesondere die In-Memory-Implementierung ist auf Tests beschränkt, daher ist beim Einsatz in Produktion in Bezug auf Leistung und Stabilität Vorsicht geboten
- Für Backend-Entwickler dürfte attraktiv sein, dass sich durch eigene Implementierung der Schnittstellen beliebige Datenquellen anbinden lassen. Reale Projekte wie Dolt sind dabei eine gute Referenz
- Ähnliche MySQL-kompatible Datenbanken sind etwa TiDB und CockroachDB. go-mysql-server hat ihnen gegenüber den Vorteil frei implementierbarer Backends, allerdings auch den Nachteil zusätzlichen Entwicklungsaufwands für das Backend
1 Kommentare
Hacker-News-Kommentare