Advertisement
Guest User

Untitled

a guest
Oct 4th, 2016
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.30 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "database/sql"
  5. "flag"
  6. "fmt"
  7. "log"
  8. "sync"
  9. "time"
  10.  
  11. _ "github.com/go-sql-driver/mysql"
  12. )
  13.  
  14. type datarow struct {
  15. pk1 int
  16. pk2 int
  17. pk3 int
  18. pk4 int
  19. startTime time.Time
  20. endTime time.Time
  21. }
  22.  
  23. var MAX_CONCURRENT = 150
  24.  
  25. func main() {
  26. user := flag.String("user", "root", "db user name")
  27. pass := flag.String("pass", "root", "db password")
  28. host := flag.String("host", "127.0.0.1", "db host")
  29. port := flag.Int("port", 3306, "port")
  30. flag.Parse()
  31.  
  32. db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/?charset=utf8", *user, *pass, *host, *port))
  33. if err != nil {
  34. log.Fatal(err)
  35. }
  36. defer db.Close()
  37. db.SetMaxOpenConns(10)
  38.  
  39. _, err = db.Exec("CREATE DATABASE IF NOT EXISTS test")
  40. if err != nil {
  41. log.Fatal(err)
  42. }
  43.  
  44. _, err = db.Exec("DROP TABLE IF EXISTS test.t1")
  45. if err != nil {
  46. log.Fatal(err)
  47. }
  48.  
  49. create := `
  50. CREATE TABLE test.t1 (
  51. pk1 int(11) NOT NULL,
  52. pk2 int(11) NOT NULL,
  53. pk3 int(11) NOT NULL,
  54. pk4 int(11) NOT NULL,
  55. f1 timestamp NULL DEFAULT NULL,
  56. f2 timestamp NULL DEFAULT NULL,
  57. PRIMARY KEY (pk1,pk2,pk3,pk4)
  58. ) ENGINE=InnoDB DEFAULT CHARSET=utf8`
  59. _, err = db.Exec(create)
  60. if err != nil {
  61. log.Fatal(err)
  62. }
  63.  
  64. ps, err := db.Prepare("INSERT INTO test.t1 VALUES (?,?,?,?,?,?)")
  65. if err != nil {
  66. log.Fatal(err)
  67. }
  68. defer ps.Close()
  69.  
  70. ch := make(chan datarow, MAX_CONCURRENT*2)
  71. var wg sync.WaitGroup
  72. for i := 0; i < MAX_CONCURRENT; i++ {
  73. wg.Add(1)
  74. go write(ps, ch, &wg)
  75. }
  76.  
  77. count := 0
  78. for pk1 := 0; pk1 < 100; pk1++ {
  79. for pk2 := 0; pk2 < 100; pk2++ {
  80. for pk3 := 0; pk3 < 100; pk3++ {
  81. for pk4 := 0; pk4 < 10; pk4++ {
  82. rs := datarow{
  83. pk1: pk1,
  84. pk2: pk2,
  85. pk3: pk3,
  86. pk4: pk4,
  87. startTime: time.Now().UTC(),
  88. endTime: time.Now().UTC(),
  89. }
  90. ch <- rs
  91. count++
  92. }
  93. }
  94. fmt.Println(count)
  95. }
  96. fmt.Println(count)
  97. }
  98. fmt.Println(count)
  99. close(ch)
  100. wg.Wait()
  101.  
  102. }
  103.  
  104. func write(ps *sql.Stmt, c chan datarow, wg *sync.WaitGroup) {
  105. for rs := range c {
  106. _, err := ps.Exec(rs.pk1, rs.pk2, rs.pk3, rs.pk4, rs.startTime, nil)
  107. if err != nil {
  108. log.Println(err)
  109. }
  110. }
  111. wg.Done()
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement