- 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:
- Sustituir MySQL en entornos de prueba de Go usando la implementación integrada de base de datos
memory
- 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
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
Opiniones en Hacker News
go-mysql-serveres lo más importante