Project Icon

dbresolver

Golang多数据库连接管理库dbresolver

dbresolver是一个Golang库,用于管理多数据库连接拓扑。它可以智能分配读写操作至适当的数据库,支持主从复制、跨区域应用和多主数据库等场景。该库提供简洁API,优化数据库查询性能,适用于复杂数据库架构。dbresolver还支持自定义负载均衡策略,为开发者提供灵活的数据库连接管理选择。

dbresolver

Golang数据库解析器和包装器,适用于任何多数据库连接拓扑,例如主从复制数据库、跨区域应用程序。

Go Go.Dev

理念和灵感

这个DBResolver库会将您的连接分配到正确定义的数据库。例如,所有读取查询将路由到只读复制数据库,所有写入操作(插入、更新、删除)将路由到主数据库。

阅读更多

项目链接
博客文章博客文章
Excalidraw图表
GoSG Meetup 演示仓库
GoSG 演示文稿幻灯片
Instagram帖子

用例1:分离的读写和只读数据库连接

点击展开
  • 您的应用程序已部署
  • 您的应用程序读取操作频繁
  • 您的数据库复制到多个副本以加快查询速度
  • 您分离连接以优化查询
  • readonly-readwrite

用例2:跨区域数据库

点击展开
  • 您的应用程序部署在多个区域
  • 您的数据库已全局配置
  • cross-region

用例3:多主数据库

点击展开
  • 您使用多主数据库拓扑,例如Aurora多主
  • multi-master

支持

您可以提交问题。 查看Go.Dev的文档。

入门

下载

go get -u github.com/bxcodec/dbresolver/v2

示例

使用*sql.DB实现DB解析器

点击展开
package main

import (
	"context"
	"database/sql"
	"fmt"
	"log"

	"github.com/bxcodec/dbresolver/v2"
	_ "github.com/lib/pq"
)

func main() {
	var (
		host1     = "localhost"
		port1     = 5432
		user1     = "postgresrw"
		password1 = "<password>"
		host2     = "localhost"
		port2     = 5433
		user2     = "postgresro"
		password2 = "<password>"
		dbname    = "<dbname>"
	)
	// 连接字符串
	rwPrimary := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", host1, port1, user1, password1, dbname)
	readOnlyReplica := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", host2, port2, user2, password2, dbname)

	// 打开主数据库连接
	dbPrimary, err := sql.Open("postgres", rwPrimary)
	if err != nil {
		log.Print("连接数据库时出错")
	}
	// 配置数据库的其他设置,例如追踪等
	// 例如,tracing.Postgres(dbPrimary)

	// 打开副本数据库连接
	dbReadOnlyReplica, err := sql.Open("postgres", readOnlyReplica)
	if err != nil {
		log.Print("连接数据库时出错")
	}
	// 配置数据库的其他设置,例如追踪等
	// 例如,tracing.Postgres(dbReadOnlyReplica)

	connectionDB := dbresolver.New(
		dbresolver.WithPrimaryDBs(dbPrimary),
		dbresolver.WithReplicaDBs(dbReadOnlyReplica),
		dbresolver.WithLoadBalancer(dbresolver.RoundRobinLB))

	defer connectionDB.Close()
	// 现在您可以使用此连接进行所有数据库操作
	_, err = connectionDB.ExecContext(context.Background(), "DELETE FROM book WHERE id=$1") // 将使用主数据库
	if err != nil {
		log.Print("执行数据库查询时出错", err)
	}
	connectionDB.QueryRowContext(context.Background(), "SELECT * FROM book WHERE id=$1") // 将使用只读副本数据库
}

重要说明

  • 当您调用以下函数时,将使用主数据库
    • Exec
    • ExecContext
    • Begin(事务将使用主数据库)
    • BeginTx
    • 带有"RETURNING"子句的查询
      • Query
      • QueryContext
      • QueryRow
      • QueryRowContext
  • 当您调用以下函数时,将使用副本数据库
    • Query
    • QueryContext
    • QueryRow
    • QueryRowContext

贡献

要为此项目做出贡献,您可以提交PR或提出问题。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号