6 points par GN⁺ 2024-04-10 | 1 commentaires | Partager sur WhatsApp
  • 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 :

  1. Remplacer MySQL dans un environnement de test Go à l’aide de l’implémentation de base de données memory intégrée
  2. 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

  • Apache License 2.0

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

 
GN⁺ 2024-04-10
Avis Hacker News
  • En tant que moteur de requêtes qui fait tourner Dolt, go-mysql-server est l’élément le plus important
  • J’ai écrit la majeure partie du code de Dolt, mais je ne suis pas l’auteur d’origine. L’histoire des débuts du projet est intéressante
  • L’idée de Dolt est séduisante, mais sa couche de persistance est trop différente et trop critique pour servir de base à une activité. Ce serait bien, en revanche, que des bases de données grand public l’adoptent
  • Si la prise en charge évolue de MySQL vers PostgreSQL et SQLite, cela permettrait de prendre en charge plusieurs moteurs de base de données dans WordPress et ailleurs
  • Cela ressemble à un proxy wire protocol de MySQL vers SQL. La base proxifiée par défaut est Dolt, et j’imagine que le projet en a été extrait
  • Go est peut-être un meilleur choix, mais du point de vue d’un développeur C#, implémenter une base de données dans un langage à GC est préoccupant. Il faudra lutter contre le GC et écrire beaucoup de code à faible allocation peu évident. Cela peut convenir à une petite équipe, mais il sera difficile de recruter des développeurs ayant les compétences adaptées
  • La compatibilité et les fonctionnalités sont très limitées, ce qui rend l’usage en production difficile (pas de prise en charge des transactions, implémentation inefficace des index, etc.). Je me demande aussi s’il prend en charge les triggers, les procédures stockées, etc.
  • Je me demande à quel point il serait difficile de l’utiliser comme alternative in-memory à MySQL pour tester un projet Rails. Comme la couche base de données est cruciale, il faut être prudent en production, mais ce serait intéressant si cela pouvait accélérer les tests
  • TiDB est une base de données distribuée compatible MySQL écrite en Go et Rust, et StarRocks est une base de données OLAP compatible MySQL écrite en Java et C++. Mais ce projet semble aborder le sujet sous un autre angle. Comme la bibliothèque MySQL de Vitess est difficile à utiliser, cela pourrait peut-être servir à construire une couche d’abstraction comme un ORM
  • Ce genre d’implémentations est impressionnant, mais je me demande s’il existe un usage réel
  • Il est proposé de se conformer au SQL standard plutôt qu’à MySQL