- Mecanismo de banco de dados compatível com MySQL, escrito em Go puro
- Um mecanismo SQL independente da fonte de dados, que executa consultas sobre a fonte de dados fornecida usando a sintaxe e o protocolo do MySQL
- Inclui uma implementação simples de banco de dados em memória, e também permite consultar a fonte de dados desejada ao implementar seu próprio backend
Compatibilidade
- Exceto por algumas limitações específicas, o go-mysql-server pode ser usado como substituto do MySQL
- Bibliotecas cliente, ferramentas, consultas, sintaxe SQL e funções SQL que funcionam no MySQL também devem funcionar no go-mysql-server
- Se encontrar diferenças de funcionalidade, envie uma issue
Escopo do projeto
- Servidor e mecanismo SQL para consultar fontes de dados
- Implementação de backend de banco de dados em memória adequada para uso em testes
- Interfaces que podem ser usadas para implementar novos backends para consultar suas próprias fontes de dados
- Considerando alguns cuidados e usando uma implementação completa de banco de dados, ele pode substituir um banco de dados MySQL
Principais casos de uso do go-mysql-server:
- Substituir o MySQL em ambientes de teste em Go usando a implementação de banco de dados
memory integrada
- Permitir acesso por consultas SQL a qualquer fonte de dados ao implementar algumas interfaces
Uso do servidor de teste em memória
- O servidor de teste em memória pode substituir um servidor MySQL real nos testes
- É possível iniciar o servidor usando o código de exemplo fornecido
- Quando o servidor estiver em execução, é possível conectar-se com um cliente MySQL, um conector MySQL para Go ou o shell
mysql
Limitações da implementação de banco de dados em memória
- A implementação de banco de dados em memória incluída foi feita para uso em testes
- Limitações conhecidas:
- Não é thread-safe. Para evitar problemas de concorrência, as instruções DDL e DML devem ser restritas a uma única goroutine
- Não oferece suporte a transações. Instruções como
START TRANSACTION, ROLLBACK e COMMIT não funcionam
- Implementação de índice ineficiente. Buscas por índice e joins executam varredura completa da tabela nas tabelas internas
Implementação de backend personalizado
- É possível criar um backend que consulta sua própria fonte de dados implementando algumas interfaces
- Para instruções detalhadas, consulte o guia de backend
Projetos movidos por go-mysql-server
- dolt
- gitbase (descontinuado)
- Se você estiver construindo um backend de banco de dados com go-mysql-server, avise
Licença
Opinião do GN⁺
- O go-mysql-server parece ser um mecanismo de banco de dados compatível com MySQL, leve e escrito em Go, útil para substituir o MySQL em ambientes de teste ou para consultar fontes de dados próprias via SQL
- Como seu objetivo é a compatibilidade com MySQL, espera-se que possa ser adotado em aplicações já baseadas em MySQL sem grandes modificações
- No entanto, ainda é um projeto experimental e, especialmente no caso da implementação em memória, seu uso se limita a testes; por isso, em produção, parece exigir cuidado em termos de desempenho e estabilidade
- Para desenvolvedores de backend, pode ser atraente o fato de ser possível implementar diretamente as interfaces e conectar a fonte de dados desejada. Vale a pena consultar exemplos de projetos reais, como o Dolt
- Bancos de dados compatíveis com MySQL semelhantes incluem TiDB e CockroachDB. Diferentemente deles, o go-mysql-server tem a vantagem de permitir implementar livremente o backend, mas, em contrapartida, isso também traz o custo adicional de desenvolver esse backend
1 comentários
Comentários no Hacker News