开源软件 for Huawei 之 GoFrame 操作华为云数据库 GaussDB 攻略
背景介绍
GoFrame https://goframe.org/ 是一款模块化、高性能、企业级的 Go 语言基础开发框架。GoFrame 是一款通用性的基础开发框架,提供通用丰富的基础开发组件, 既可用于开发完整的工程化项目,也可以作为工具库独立使用。
GoFrame 框架的 ORM 功能由 gdb 模块实现,用于常用关系型数据库的 ORM 操作。gdb 基本介绍 https://goframe.org/docs/core/gdb
华为云数据库 GaussDB(https://support.huaweicloud.cn/gaussdb/index.html) 是华为自主创新研发的分布式关系型数据库。该产品具备企业级复杂事务混合负载能力,同时支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。同时拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力。
开发思路
gdb 模块使用了非常灵活且扩展性强的接口设计,接口设计允许开发者可以非常方便地自定义实现和替换接口定义中的任何方法。开发者自定义的驱动需要实现 Driver 接口 https://goframe.org/docs/core/gdb-interface#driver-%E6%8E%A5%E5%8F%A3
// Driver is the interface for integrating sql drivers into package gdb.
type Driver interface {
// New creates and returns a database object for specified database server.
New(core *Core, node *ConfigNode) (DB, error)
}
因此,如果要实现 gdb 操作 GaussDB 数据库,我们就需要实现一个 gdb.Driver 中间接口层,或者使用其它已有的 gdb.Driver 中间层,然后注册 GaussDB 数据库驱动类。
具体实现
- 自定义 gdb 驱动,自己实现 Driver 接口,然后底层使用 GaussDB 数据库驱动类。
gdb.Driver 实现详见:gaussdb
示例代码:
import (
_ "github.com/gogf/gf/contrib/drivers/gaussdb/v2"
"github.com/gogf/gf/v2/database/gdb"
)
dsn := "host=127.0.0.1 user=test password=123456 dbname=test port=8000 sslmode=disable TimeZone=Asia/Shanghai"
configNode := gdb.ConfigNode{
Type: "gaussdb",
Link: dsn,
}
gdb.AddConfigNode(gdb.DefaultGroupName, configNode)
db, err := gdb.New(configNode)
if err != nil {
panic(err)
}
gdb 操作 GaussDB 应用示例:examples
- 使用已有的 postgres 驱动,然后通过修改 pgsql 驱动代码,将 github.com/lib/pq 替换为 GaussDB 数据库驱动类。
package pgsql
import (
// _ "github.com/lib/pg"
_ "gitee.com/opengauss/openGauss-connector-go-pq"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/os/gctx"
)
示例代码:
import (
_ "github.com/gogf/gf/contrib/drivers/pgsql/v2"
"github.com/gogf/gf/v2/database/gdb"
)
dsn := "host=127.0.0.1 user=test password=123456 dbname=test port=8000 sslmode=disable TimeZone=Asia/Shanghai"
configNode := gdb.ConfigNode{
Type: "pgsql",
Link: dsn,
}
gdb.AddConfigNode(gdb.DefaultGroupName, configNode)
db, err := gdb.New(configNode)
if err != nil {
panic(err)
}
gdb 操作 GaussDB 应用示例:gf-for-gaussdb
另外,如果我们要使用从华为云数据库 GaussDB 官网下载 的驱动压缩包时,需要在 go.mod 中使用 replace 替换到本地包。该下载版的驱动类中,在开源版驱动的基础上,在创建数据库连接时多注册了“postgres”和“postgresql”这两个驱动名称。
编写 Demo 微服务
为了在微服务开发中使用 GORM 来操作 GaussDB 数据库,在编写 Demo 微服务时我使用 go-zero(https://go-zero.dev/) 框架来实现 RESTful 接口服务。go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。
Demo 参考地址:(https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiDemoGo)
Demo 微服务架构:
Demo 开发完成以后,我使用华为云的软件开发生产线 CodeArts 来构建这个 Demo 服务,具体方法可以参考:
在华为云部署示例项目(https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/blob/main/zh_CN/docs/cicd-pipeline.md)
- 点赞
- 收藏
- 关注作者
评论(0)