XORM 은 엔진그룹을 생성하여 마스터/슬레이브 데이터베이스를 관리할 수 있습니다. 이는 xorm.NewEngineGroup
을 사용하며 예제는 다음과 같습니다.:
import (
_ "github.com/lib/pq"
"github.com/xormplus/xorm"
)
var eg *xorm.EngineGroup
func main() {
conns := []string{
"postgres://postgres:root@localhost:5432/test?sslmode=disable;", // 첫번째 항목이 master
"postgres://postgres:root@localhost:5432/test1?sslmode=disable;", // slave
"postgres://postgres:root@localhost:5432/test2?sslmode=disable", // slave
}
var err error
eg, err = xorm.NewEngineGroup("postgres", conns)
}
또는
import (
_ "github.com/lib/pq"
"github.com/xormplus/xorm"
)
var eg *xorm.EngineGroup
func main() {
var err error
master, err := xorm.NewEngine("postgres", "postgres://postgres:root@localhost:5432/test?sslmode=disable")
if err != nil {
return
}
slave1, err := xorm.NewEngine("postgres", "postgres://postgres:root@localhost:5432/test1?sslmode=disable")
if err != nil {
return
}
slave2, err := xorm.NewEngine("postgres", "postgres://postgres:root@localhost:5432/test2?sslmode=disable")
if err != nil {
return
}
slaves := []*xorm.Engine{slave1, slave2}
eg, err = xorm.NewEngineGroup(master, slaves)
}
일반적으로는 하나의 엔진 그룹을 생성합니다. 하지만 다양한 데이터베이스를 사용하는 경우 여러 엔진 그룹을 생성할 수 있습니다. EngineGroup
은 고루틴으로 실행할 수 있습니다.
엔진 그룹을 수동으로 종료하려면 enginegroup.Close
을 호출합니다.
- NewEngineGroup
func NewEngineGroup(args1 interface{}, args2 interface{}, policies ...GroupPolicy) (*EngineGroup, error)
- Master
func (eg *EngineGroup) Master() *Engine
마스터 데이터베이스 Engine
을 반환합니다. 이를 이용해 마스터에만 동작을 실행시킬 수 있습니다.
- Slave
func (eg *EngineGroup) Slave() *Engine
로드밸런스 정책에 따라 현재 슬레이브 엔진을 반환합니다.
- Slaves
func (eg *EngineGroup) Slaves() []*Engine
모든 슬레이브를 반환합니다.
- GetSlave
func (eg *EngineGroup) GetSlave(i int) *Engine
인덱스에 따라 슬레이브 엔진을 반환합니다.
- SetPolicy
func (eg *EngineGroup) SetPolicy(policy GroupPolicy) *EngineGroup
로드밸런스 정책을 설정합니다.