yashmurty / standard-database-library

DB Library that abstracts access to master and read-replica databases

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

mydb

Package mydb is a library that abstracts access to master and read-replica databases as a single logical database mimicking the standard sql.DB APIs.

Usage

package main

import (
  "log"

  "github.com/xxx/mydb"
  _ "github.com/go-sql-driver/mysql"
)

func main() {
    // The first input argument is the master and all
    // others are read-replicas.
    masterDB, _ := sql.Open("mysql", "tcp://user:password@master/dbname")
    readReplicaDB, _ := sql.Open("mysql", "tcp://user:password@read1/dbname")
    readReplicaDB2, _ := sql.Open("mysql", "tcp://user:password@read2/dbname")

    db := New(masterDB, readReplicaDB, readReplicaDB2)

    // Read queries are directed to read-replicas with Query and QueryRow.
    // Always use Query or QueryRow for SELECTS
    // Load distribution is round-robin only for now.
    var count int
    err := db.QueryRow("SELECT COUNT(*) FROM sometable").Scan(&count)
    if err != nil {
        log.Fatal(err)
    }

    // Write queries are directed to the master with Exec.
    // Always use Exec for INSERTS, UPDATES
    _, err := db.Exec("UPDATE sometable SET something = 1")
    if err != nil {
        log.Fatal(err)
    }
    ...
}

Answer MD shortcut link

Please click here.

About

DB Library that abstracts access to master and read-replica databases


Languages

Language:Go 100.0%