Closed flycash closed 1 year ago
仅限中文
这也算是一个实验性质的方案。目前我们有一个 Session 的抽象,那么我们可以考虑提供一个 MasterSlavesDB 实现来支持读写分离。
基本设计就是:
type MasterSlavesDB struct { master *sql.DB slaves *sql.DB }
对于 SELECT 语句来说,默认情况下使用从库,其它语句默认使用主库。
但是有一个特殊的场景需要考虑,那就是在开启了事务的情况下,所有的查询都应该使用主库。那么相应的,我们需要修改已有的 Tx 结构体(或者提供一个新的实现),以保持这种语义。
另外还应该允许用户强制指定使用主库,但是不需要考虑用户要求强制使用某个从库的情况。
到目前为止,你不需要考虑从库负载均衡的问题,采用默认的轮询就可以,我们后面再考虑引入不同的负载均衡设计。
仅限中文
使用场景
这也算是一个实验性质的方案。目前我们有一个 Session 的抽象,那么我们可以考虑提供一个 MasterSlavesDB 实现来支持读写分离。
基本设计就是:
对于 SELECT 语句来说,默认情况下使用从库,其它语句默认使用主库。
但是有一个特殊的场景需要考虑,那就是在开启了事务的情况下,所有的查询都应该使用主库。那么相应的,我们需要修改已有的 Tx 结构体(或者提供一个新的实现),以保持这种语义。
另外还应该允许用户强制指定使用主库,但是不需要考虑用户要求强制使用某个从库的情况。
到目前为止,你不需要考虑从库负载均衡的问题,采用默认的轮询就可以,我们后面再考虑引入不同的负载均衡设计。