ecodeclub / eorm

简单 ORM 框架
Apache License 2.0
194 stars 64 forks source link

读写分离:MasterSlavesDB 实现 #144

Closed flycash closed 1 year ago

flycash commented 1 year ago

仅限中文

使用场景

这也算是一个实验性质的方案。目前我们有一个 Session 的抽象,那么我们可以考虑提供一个 MasterSlavesDB 实现来支持读写分离。

基本设计就是:

type MasterSlavesDB struct {
    master *sql.DB
    slaves *sql.DB
}

对于 SELECT 语句来说,默认情况下使用从库,其它语句默认使用主库。

但是有一个特殊的场景需要考虑,那就是在开启了事务的情况下,所有的查询都应该使用主库。那么相应的,我们需要修改已有的 Tx 结构体(或者提供一个新的实现),以保持这种语义。

另外还应该允许用户强制指定使用主库,但是不需要考虑用户要求强制使用某个从库的情况。

到目前为止,你不需要考虑从库负载均衡的问题,采用默认的轮询就可以,我们后面再考虑引入不同的负载均衡设计。