Golang REL v0.28.0 发布 - 新增主从连接支持

Golang REL v0.28.0 发布 - 新增主从连接支持 大家好,REL v0.28.0 已发布,我们现在支持主/副本数据库连接。 了解更多信息请访问:https://github.com/go-rel/primaryreplica

文档:https://go-rel.github.io/introduction/ 更新日志:https://go-rel.github.io/changelog/release-notes/

GitHub - go-rel/rel: Modern ORM for Golang - Testable, Extendable and Crafted...

:gem: 适用于 Golang 的现代 ORM - 可测试、可扩展,并精心打造出简洁优雅的 API


更多关于Golang REL v0.28.0 发布 - 新增主从连接支持的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang REL v0.28.0 发布 - 新增主从连接支持的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


REL v0.28.0 的主从连接支持是 Go ORM 领域的一个重要更新,它直接解决了生产环境中数据库读写分离的架构需求。通过原生支持主从连接,开发者现在可以更轻松地实现读操作的负载均衡和高可用性,而无需自行封装或依赖外部中间件。

以下是一个基本的主从连接配置示例:

package main

import (
    "context"
    "github.com/go-rel/rel"
    "github.com/go-rel/primaryreplica"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    // 配置主库(写操作)
    primary, _ := sql.Open("mysql", "user:pass@tcp(primary.db:3306)/db")
    // 配置从库(读操作)
    replica, _ := sql.Open("mysql", "user:pass@tcp(replica.db:3306)/db")

    // 创建主从连接适配器
    adapter := primaryreplica.New(primary, replica)
    
    // 初始化 REL 仓库
    repo := rel.New(adapter)
    
    ctx := context.Background()
    
    // 写入操作自动路由到主库
    repo.Insert(ctx, &User{Name: "Alice"})
    
    // 查询操作自动路由到从库
    var users []User
    repo.FindAll(ctx, &users)
}

这个实现的核心在于 primaryreplica.New() 创建了一个智能适配器,它根据操作类型自动选择连接。对于 InsertUpdateDelete 等写操作使用主库,对于 FindFindAll 等读操作使用从库。这种设计保持了 API 的简洁性,开发者无需在业务代码中显式指定连接。

从实现角度看,这个特性通过适配器模式将主从连接逻辑抽象化。primaryreplica 包实现了 rel.Adapter 接口,在内部根据 SQL 操作类型进行路由决策。对于需要强制使用主库的读场景(如读取刚写入的数据),REL 可能还需要提供类似 WithPrimary() 的上下文选项来覆盖默认行为。

这个更新使得 REL 在功能上更接近成熟的 ORM 框架,为构建高性能的 Go 应用程序提供了更好的基础设施支持。主从支持的加入也表明 REL 项目正在向生产就绪的方向发展,值得在实际项目中评估使用。

回到顶部