You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Auto proxy for any master-slave, master-master databases. Compatible with Wsrep, Galera Cluster and others.
Auto and lightweight round-robin balancer for queries.
Builtin error handling for Wsrep, Galera and some database drivers. Auto retry select/get/query queries when detected bad connection causing by DBMS's timeout policy which auto-closes non interactive/timeout connection.
It's highly recommended to setup configuration before querying.
db.SetMaxIdleConns(20) // set max idle connections to all nodes// db.SetMasterMaxIdleConns(20) // set max idle connections to master nodes// db.SetSlaveMaxIdleConns(20) // set max idle connections to slave nodesdb.SetMaxOpenConns(50) // set max open connections to all nodes// db.SetMasterMaxOpenConns(50) // db.SetSlaveMaxOpenConns(50)// if nodes fail, checking healthy in a period (in milliseconds) for auto reconnect. Default is 500.db.SetHealthCheckPeriod(1000)
// db.SetMasterHealthCheckPeriod(1000)// db.SetSlaveHealthCheckPeriod(1000)
Select
typePersonstruct {
FirstNamestring`db:"first_name"`LastNamestring`db:"last_name"`EmailstringData []byte
}
varpeople []Persondb.Select(&people, "SELECT * FROM person WHERE id > ? and id < ? ORDER BY first_name ASC", 1, 1000)
Get
varpersonPersondb.Get(&person, "SELECT * FROM person WHERE id = ?", 1)
Queryx
// Loop through rows using only one structvarpersonPersonrows, err:=db.Queryx("SELECT * FROM person") // or db.QueryxOnMaster(...)forrows.Next() {
iferr:=rows.StructScan(&person); err!=nil {
log.Fatalln(err)
}
fmt.Printf("%#v\n", person)
}
Named query
// Loop through rows using only one structvarpersonPersonrows, err:=db.NamedQuery(`SELECT * FROM person WHERE first_name = :fn`, map[string]interface{}{"fn": "Bin"}) // or db.NamedQueryOnMaster(...)forrows.Next() {
iferr:=rows.StructScan(&person); err!=nil {
log.Fatalln(err)
}
fmt.Printf("%#v\n", person)
}
Exec (insert/update/delete/etc...)
result, err:=db.Exec("DELETE FROM person WHERE id < ?", 100)
APIs supports executing query on master-only or slave-only (or boths). Function name for querying on master-only has suffix OnMaster, querying on slaves-only has suffix OnSlave.
Default select/show queries are balanced on slaves.
About
Database client library, proxy for any master slave, master master structures. Lightweight, performant and auto balancing in mind.