基于Go的全功能MySQL兼容数据库引擎

基于Go的全功能MySQL兼容数据库引擎

项目Logo

项目简介

go-mysql-server 是一个用纯Go语言编写的、与MySQL兼容的SQL引擎和服务器,它允许您在自定义的数据源上执行MySQL方言和网络协议的查询。项目内含了一个简单的内存数据库实现,并提供了接口,让您能为自己的数据源实现查询后端。

Delta,一个带有Git式版本控制的SQL数据库,是本项目的主要生产数据库实现。您可以通过访问该项目了解更多关于Dolt的信息,或者加入Dolt的Discord社区与核心开发团队进行交流。

兼容性

除了特定限制(见下文),go-mysql-server 可以说是MySQL的直接替代品。任何与MySQL兼容的客户端库、工具、查询、SQL语法、SQL函数等在go-mysql-server 上也应能正常工作。如发现不兼容问题,请提交问题报告。

完整的MySQL兼容性文档可以在Dolt的参考文档中找到。

项目范围

  • SQL服务器和引擎,用于查询您的数据源。
  • 内存数据库后端实现,适合测试环境使用。
  • 接口,用于实现新的后台,以查询自定义数据源。
  • 几乎可以作为MySQL的直接替换,前提是使用完整的数据库实现。

go-mysql-server 主要应用在两个场景:

  1. 在Go测试环境中作为MySQL的替代品,使用内置的memory数据库实现。
  2. 提供对任意数据源的SQL查询,通过实现几个接口来完成。

安装

go-mysql-server 添加到你的项目依赖中,在含有go.mod文件的目录运行以下命令:

go get github.com/dolthub/go-mysql-server@latest

使用内存测试服务器

内存测试服务器可替代真实的MySQL服务器进行测试。你可以参考_example目录下的示例代码进行设置,以下代码进行了简要展示:

// ...

运行该示例程序后,即可通过任何MySQL客户端连接并查询服务器,包括golang MySQL连接器和mysql shell。

> mysql --host=localhost --port=3306 --user=root mydb --execute="SELECT * FROM mytable;"

内存数据库实现的限制

内存数据库实现主要设计用于测试用途,已知有以下限制:

  • 不线程安全。避免在多个goroutine中执行DDL或DML语句。
  • 不支持事务。START TRANSACTIONROLLBACKCOMMIT 语句无效。
  • 索引实现性能较低。索引查找和JOIN操作会扫描底层表。

自定义后端实现

通过实现一些接口,您可以创建自己的后端以查询自己的数据源。详细指南参见后台开发指南

技术文档

  • 架构概述涵盖了项目的各个包及其相互关系。
  • 贡献指南为新贡献者提供指导,包括PR合并流程。

驱动于go-mysql-server的项目

如果您正在使用go-mysql-server 构建数据库后端,我们希望听到您的声音,并期待您出现在我们的列表中。

安全政策

go-mysql-server 的安全政策在此存储库中维护。请按照安全政策中的披露指示进行操作。请勿在公共GitHub问题中首次报告安全问题。

致谢

go-mysql-server 最初由{source-d}组织开发,最初是从src-d分支出来的。我们要感谢整个{source-d}开发团队,尤其是Miguel Molina (@erizocosmico) 和 Juanjo Álvarez Martínez (@juanjux)的工作。

许可证

Apache许可证v2.0,详情参见LICENSE 文件。

让我们一起探索这个强大的数据库引擎,开启您的编程之旅吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任澄翊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值