Advertisement
Guest User

Untitled

a guest
Feb 24th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "database/sql"
  6. _ "github.com/lib/pq"
  7. "log"
  8. "math/rand"
  9. "time"
  10. "strconv"
  11. "runtime"
  12. )
  13.  
  14. var (
  15. txn *sql.Tx
  16. err error
  17. db *sql.DB
  18. stmt *sql.Stmt
  19. conString = "user= host= password= dbname= sslmode=disable"
  20. customerList []int
  21. )
  22.  
  23. // populates a database with test data
  24. func main() {
  25. rand.Seed(time.Now().UnixNano())
  26. startTime := time.Now().UnixNano()
  27. var memStats runtime.MemStats
  28.  
  29. if db, err = sql.Open("postgres", conString); err != nil {
  30. log.Fatalln(err)
  31. }
  32. defer db.Close()
  33.  
  34. runtime.ReadMemStats(&memStats)
  35. fmt.Printf("Memory in use: %v Mb\n", memStats.Alloc / 1024 / 1024)
  36. fmt.Printf("Obtained from system: %d Mb\n", memStats.Sys / 1024 / 1024)
  37.  
  38. customerList = loadCustomerID()
  39.  
  40. runtime.ReadMemStats(&memStats)
  41. fmt.Printf("Memory in use: %v Mb\n", memStats.Alloc / 1024 / 1024)
  42. fmt.Printf("Obtained from system: %v Mb\n", memStats.Sys / 1024 / 1024)
  43.  
  44. endTime := time.Now().UnixNano()
  45. fmt.Printf("completed in: %d ms\n", (endTime - startTime) / int64(time.Millisecond))
  46. }
  47.  
  48. // get the maximum customer_id in the customer table
  49. func getMaxCustomerID() int {
  50. var maxCustomerID string
  51. row := db.QueryRow("SELECT max(customer_id) as max_customer from customer")
  52. err := row.Scan(&maxCustomerID)
  53. if err != nil {
  54. log.Fatal(err)
  55. }
  56. intMaxCustomerID, err := strconv.Atoi(maxCustomerID)
  57. if err != nil {
  58. log.Fatal(err)
  59. }
  60.  
  61. return intMaxCustomerID
  62. }
  63.  
  64. // load list of available customerID
  65. func loadCustomerID() []int {
  66. var list []int
  67.  
  68. const limit = 1000000
  69.  
  70. maxCustomerID := getMaxCustomerID()
  71.  
  72. for offset := 0; offset < maxCustomerID; offset += limit {
  73. fmt.Printf("limit: %d offset: %d\n", limit, offset)
  74. rows, err := db.Query("SELECT customer_id FROM customer LIMIT $1 OFFSET $2", limit, offset)
  75. if err != nil && err == sql.ErrNoRows {
  76. break // no more records
  77. }
  78.  
  79. if (err != nil) {
  80. log.Fatalln(err)
  81. }
  82.  
  83. for rows.Next() {
  84. var record string
  85. err = rows.Scan(&record)
  86. if (err != nil) {
  87. log.Fatalln(err)
  88. }
  89. customerID, _ := strconv.Atoi(record)
  90. list = append(list, customerID)
  91. }
  92. }
  93. return list
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement