基于Go的全功能MySQL兼容数据库引擎
项目简介
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 主要应用在两个场景:
- 在Go测试环境中作为MySQL的替代品,使用内置的
memory
数据库实现。 - 提供对任意数据源的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 TRANSACTION
,ROLLBACK
和COMMIT
语句无效。 - 索引实现性能较低。索引查找和JOIN操作会扫描底层表。
自定义后端实现
通过实现一些接口,您可以创建自己的后端以查询自己的数据源。详细指南参见后台开发指南。
技术文档
驱动于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 文件。
让我们一起探索这个强大的数据库引擎,开启您的编程之旅吧!