Skip to content

Instantly share code, notes, and snippets.

@mrtdeh
Forked from c16a/main.go
Created June 17, 2023 06:13
Show Gist options
  • Select an option

  • Save mrtdeh/2903893094037580b4a9548e67b6f706 to your computer and use it in GitHub Desktop.

Select an option

Save mrtdeh/2903893094037580b4a9548e67b6f706 to your computer and use it in GitHub Desktop.

Revisions

  1. @c16a c16a created this gist Aug 6, 2017.
    66 changes: 66 additions & 0 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,66 @@
    package main

    import "database/sql"
    import (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/satori/go.uuid"
    "math/rand"
    "sync"
    )

    const (
    DB_HOST = "tcp(127.0.0.1:3307)"
    DB_NAME = "one"
    DB_USER = /*"root"*/ "root"
    DB_PASS = /*""*/ "fofx"
    MAX_ROWS_PER_THREAD = 100000
    NUMBER_OF_THREADS = 10000
    )

    var wg sync.WaitGroup

    func main() {
    dsn := DB_USER + ":" + DB_PASS + "@" + DB_HOST + "/" + DB_NAME + "?charset=utf8"
    db, err := sql.Open("mysql", dsn)
    if err != nil {
    panic(err)
    }

    tx, transactionError := db.Begin()
    if transactionError != nil {
    panic(transactionError)
    }

    stmt, stmtError := tx.Prepare(`INSERT INTO users VALUES (?, ?, ?)`)
    if stmtError != nil {
    panic(stmtError)
    }

    wg.Add(NUMBER_OF_THREADS)
    for t := 0; t < NUMBER_OF_THREADS; t++ {
    go stmtExec(t, stmt, tx)
    }
    wg.Wait()
    }

    func stmtExec(threadNo int, stmt *sql.Stmt, tx *sql.Tx) {
    defer wg.Done()
    for i := 0; i < MAX_ROWS_PER_THREAD; i++ {
    stmt.Exec(uuid.NewV4().String(), randSeq(50), randSeq(255))
    if i%10000 == 0 && i != 0 {
    fmt.Println("ThreadNumber:", threadNo, ", row:", i)
    }
    }
    tx.Commit()
    }

    var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")

    func randSeq(n int) string {
    b := make([]rune, n)
    for i := range b {
    b[i] = letters[rand.Intn(len(letters))]
    }
    return string(b)
    }