6 puntos por GN⁺ 2024-04-10 | 1 comentarios | Compartir por WhatsApp
  • Motor de base de datos compatible con MySQL escrito en Go puro
  • Es un motor SQL independiente de la fuente de datos que ejecuta consultas sobre las fuentes de datos proporcionadas usando la sintaxis y el protocolo de MySQL
  • Incluye una implementación sencilla de base de datos en memoria, y también se puede implementar un backend propio para consultar la fuente de datos que se desee

Compatibilidad

  • Salvo por ciertas limitaciones, go-mysql-server puede usarse como reemplazo de MySQL
  • Las bibliotecas cliente, herramientas, consultas, sintaxis SQL y funciones SQL que funcionan en MySQL también deberían funcionar en go-mysql-server
  • Si se encuentra alguna diferencia de funcionalidad, se agradece reportar un issue

Alcance del proyecto

  • Servidor y motor SQL para consultar fuentes de datos
  • Implementación de backend de base de datos en memoria adecuada para su uso en pruebas
  • Interfaces que pueden usarse para implementar un nuevo backend con el fin de consultar una fuente de datos propia
  • Teniendo en cuenta algunas advertencias y usando una implementación completa de base de datos, puede reemplazar una base de datos MySQL

Principales casos de uso de go-mysql-server:

  1. Sustituir MySQL en entornos de prueba de Go usando la implementación integrada de base de datos memory
  2. Implementar algunas interfaces para permitir acceder mediante consultas SQL a una fuente de datos arbitraria

Uso del servidor de pruebas en memoria

  • El servidor de pruebas en memoria puede reemplazar a un servidor MySQL real en las pruebas
  • Se puede iniciar el servidor usando el código de ejemplo proporcionado
  • Una vez en ejecución, es posible conectarse con un cliente MySQL, un conector MySQL para Go o el shell mysql

Limitaciones de la implementación de base de datos en memoria

  • La implementación de base de datos en memoria incluida está pensada para usarse en pruebas
  • Limitaciones conocidas:
    • No es thread-safe. Para evitar problemas de concurrencia, las sentencias DDL y DML deben limitarse a una sola goroutine
    • No soporta transacciones. Sentencias como START TRANSACTION, ROLLBACK y COMMIT no funcionan
    • Implementación de índices ineficiente. Las búsquedas por índice y los joins realizan escaneos completos de tabla sobre las tablas internas

Implementación de backend personalizado

  • Se puede crear un backend para consultar una fuente de datos propia implementando algunas interfaces
  • Para instrucciones detalladas, consultar la guía de backend

Proyectos impulsados por go-mysql-server

  • dolt
  • gitbase (descontinuado)
  • Si estás construyendo un backend de base de datos con go-mysql-server, les gustaría saberlo

Licencia

  • Apache License 2.0

Opinión de GN⁺

  • go-mysql-server parece ser un motor de base de datos ligero compatible con MySQL, escrito en Go, útil para reemplazar MySQL en entornos de prueba o para consultar con SQL fuentes de datos propias
  • Como busca compatibilidad con MySQL, se espera que pueda aplicarse a aplicaciones existentes basadas en MySQL sin necesidad de grandes cambios
  • Sin embargo, todavía es un proyecto experimental y, en particular, su implementación en memoria está limitada a pruebas, por lo que en producción parece necesario tener cuidado con el rendimiento y la estabilidad
  • Para desarrolladores de backend, puede resultar atractivo poder implementar directamente las interfaces y conectar la fuente de datos que deseen. Puede ser útil tomar como referencia casos reales como Dolt
  • Entre las bases de datos compatibles con MySQL similares están TiDB y CockroachDB. A diferencia de ellas, go-mysql-server tiene la ventaja de permitir implementar libremente el backend, aunque eso también implica el costo adicional de desarrollarlo

1 comentarios

 
GN⁺ 2024-04-10
Opiniones en Hacker News
  • Como motor de consultas que impulsa a Dolt, go-mysql-server es lo más importante
  • Escribió la mayor parte del código de Dolt, pero no es el autor original. La historia de fondo de cómo empezó el proyecto es interesante
  • La idea de Dolt es atractiva, pero es una capa de persistencia demasiado distinta y crítica como para construir un negocio encima. Aun así, sería bueno que las bases de datos principales adoptaran algo así
  • Si el soporte evoluciona de MySQL a PostgreSQL y SQLite, sería posible ofrecer soporte para múltiples motores de base de datos en WordPress y otros
  • Parece ser un proxy de protocolo wire de MySQL hacia SQL. La base de datos proxied por defecto es Dolt, y se supone que fue extraído de Dolt
  • Puede que Go sea mejor, pero desde la perspectiva de un desarrollador de C#, implementar una base de datos en un lenguaje con GC genera preocupación. Habría que pelear con el GC y escribir mucho código de baja asignación nada obvio. Puede estar bien para equipos pequeños, pero sería difícil contratar desarrolladores con las habilidades adecuadas
  • La compatibilidad y las funciones están muy limitadas, por lo que parece difícil usarlo en producción (sin soporte de transacciones, implementación ineficiente de índices, etc.). También da curiosidad si soporta triggers, procedimientos almacenados y similares
  • Da curiosidad qué tan difícil sería usarlo como reemplazo en memoria de MySQL para probar proyectos de Rails. Como la capa de base de datos es importante, habría que tener cuidado en producción, pero sería interesante si pudiera acelerar las pruebas
  • TiDB es una base de datos distribuida compatible con MySQL escrita en Go y Rust, y StarRocks es una base de datos OLAP compatible con MySQL escrita en Java y C++. Pero este proyecto parece abordar una perspectiva distinta. Como la librería MySQL de Vitess es difícil de usar, quizá podría servir para construir una capa de abstracción como un ORM
  • Estas implementaciones sorprenden, pero queda la duda de si realmente tienen un caso de uso práctico
  • Se propone que, en lugar de MySQL, sería mejor cumplir con el SQL estándar