- Moteur de base de données compatible MySQL écrit en pur Go
- Moteur SQL indépendant de la source de données, qui exécute des requêtes sur les sources de données fournies en utilisant la syntaxe et le protocole MySQL
- Inclut une implémentation simple de base de données en mémoire, et il est possible d’implémenter son propre backend pour interroger la source de données de son choix
Compatibilité
- À l’exception de certaines limitations, go-mysql-server peut être utilisé comme substitut à MySQL
- Les bibliothèques clientes, outils, requêtes, syntaxe SQL et fonctions SQL qui fonctionnent avec MySQL devraient également fonctionner avec go-mysql-server
- Si vous constatez une différence de fonctionnalité, merci de la signaler via une issue
Périmètre du projet
- Serveur SQL et moteur pour interroger des sources de données
- Implémentation d’un backend de base de données en mémoire adaptée aux tests
- Interfaces pouvant être utilisées pour implémenter un nouveau backend destiné à interroger sa propre source de données
- En tenant compte de quelques points d’attention et en utilisant une implémentation complète de base de données, il peut remplacer une base de données MySQL
Principaux cas d’usage de go-mysql-server :
- Remplacer MySQL dans un environnement de test Go à l’aide de l’implémentation de base de données
memory intégrée
- Permettre l’accès SQL à une source de données arbitraire en implémentant quelques interfaces
Utilisation du serveur de test en mémoire
- Le serveur de test en mémoire peut remplacer un véritable serveur MySQL dans les tests
- Le serveur peut être démarré à l’aide du code d’exemple fourni
- Une fois le serveur lancé, il est possible de s’y connecter avec un client MySQL, un connecteur MySQL pour Go ou le shell
mysql
Limitations de l’implémentation de base de données en mémoire
- L’implémentation de base de données en mémoire incluse est destinée à un usage de test
- Limitations connues :
- Elle n’est pas thread-safe. Pour éviter les problèmes de concurrence, il faut limiter les instructions DDL et DML à une seule goroutine
- Elle ne prend pas en charge les transactions. Les instructions
START TRANSACTION, ROLLBACK, COMMIT, etc. ne fonctionnent pas
- Implémentation inefficace des index. Les recherches par index et les jointures effectuent des scans complets des tables internes
Implémentation d’un backend personnalisé
- Il est possible de créer un backend interrogeant sa propre source de données en implémentant certaines interfaces
- Voir le guide backend pour des instructions détaillées
Projets propulsés par go-mysql-server
- dolt
- gitbase (abandonné)
- Si vous construisez un backend de base de données avec go-mysql-server, merci de le faire savoir
Licence
L’avis de GN⁺
- go-mysql-server semble être un moteur de base de données léger compatible MySQL, écrit en Go, utile pour remplacer MySQL dans un environnement de test ou pour interroger sa propre source de données en SQL
- Comme il vise la compatibilité MySQL, on peut espérer l’adopter sans modifier en profondeur les applications existantes basées sur MySQL
- Cela dit, le projet reste encore expérimental et, en particulier, l’implémentation en mémoire se limite aux tests, ce qui impose de la prudence sur les performances et la stabilité en production
- Pour les développeurs backend, le fait de pouvoir implémenter directement les interfaces pour connecter la source de données souhaitée est un point attractif. Il peut être utile de se référer à des projets concrets comme Dolt
- Parmi les bases de données similaires compatibles MySQL, on peut citer TiDB et CockroachDB. Contrairement à elles, go-mysql-server a l’avantage de permettre une implémentation libre du backend, mais cela implique aussi un coût supplémentaire de développement du backend
1 commentaires
Avis Hacker News