Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "database/sql"
- _ "github.com/lib/pq"
- "log"
- "math/rand"
- "time"
- "strconv"
- "runtime"
- )
- var (
- txn *sql.Tx
- err error
- db *sql.DB
- stmt *sql.Stmt
- conString = "user= host= password= dbname= sslmode=disable"
- customerList []int
- )
- // populates a database with test data
- func main() {
- rand.Seed(time.Now().UnixNano())
- startTime := time.Now().UnixNano()
- var memStats runtime.MemStats
- if db, err = sql.Open("postgres", conString); err != nil {
- log.Fatalln(err)
- }
- defer db.Close()
- runtime.ReadMemStats(&memStats)
- fmt.Printf("Memory in use: %v Mb\n", memStats.Alloc / 1024 / 1024)
- fmt.Printf("Obtained from system: %d Mb\n", memStats.Sys / 1024 / 1024)
- customerList = loadCustomerID()
- runtime.ReadMemStats(&memStats)
- fmt.Printf("Memory in use: %v Mb\n", memStats.Alloc / 1024 / 1024)
- fmt.Printf("Obtained from system: %v Mb\n", memStats.Sys / 1024 / 1024)
- endTime := time.Now().UnixNano()
- fmt.Printf("completed in: %d ms\n", (endTime - startTime) / int64(time.Millisecond))
- }
- // get the maximum customer_id in the customer table
- func getMaxCustomerID() int {
- var maxCustomerID string
- row := db.QueryRow("SELECT max(customer_id) as max_customer from customer")
- err := row.Scan(&maxCustomerID)
- if err != nil {
- log.Fatal(err)
- }
- intMaxCustomerID, err := strconv.Atoi(maxCustomerID)
- if err != nil {
- log.Fatal(err)
- }
- return intMaxCustomerID
- }
- // load list of available customerID
- func loadCustomerID() []int {
- var list []int
- const limit = 1000000
- maxCustomerID := getMaxCustomerID()
- for offset := 0; offset < maxCustomerID; offset += limit {
- fmt.Printf("limit: %d offset: %d\n", limit, offset)
- rows, err := db.Query("SELECT customer_id FROM customer LIMIT $1 OFFSET $2", limit, offset)
- if err != nil && err == sql.ErrNoRows {
- break // no more records
- }
- if (err != nil) {
- log.Fatalln(err)
- }
- for rows.Next() {
- var record string
- err = rows.Scan(&record)
- if (err != nil) {
- log.Fatalln(err)
- }
- customerID, _ := strconv.Atoi(record)
- list = append(list, customerID)
- }
- }
- return list
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement