Advertisement
Guest User

Untitled

a guest
Mar 10th, 2014
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.38 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.         "encoding/csv"
  5.         "fmt"
  6.         "github.com/fsouza/gokabinet/kc"
  7.         "log"
  8.         "math/rand"
  9.         "os"
  10.         "runtime"
  11.         "time"
  12. )
  13.  
  14. const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 abcdefghijklmnopqrstuvwxyz" +
  15.         "~!@#$%^&*()-_+={}[]\\|<,>.?/\"';:`"
  16.  
  17. const Maxlen = 1024
  18.  
  19. func RandStrings(N int) []string {
  20.         r := make([]string, N)
  21.         ri := 0
  22.         buf := make([]byte, Maxlen)
  23.         known := map[string]bool{}
  24.  
  25.         for i := 0; i < N; i++ {
  26.         retry:
  27.                 l := rand.Intn(Maxlen)
  28.                 for j := 0; j < l; j++ {
  29.                         buf[j] = chars[rand.Intn(len(chars))]
  30.                 }
  31.                 s := string(buf[0:l])
  32.                 if known[s] {
  33.                         goto retry
  34.                 }
  35.                 known[s] = true
  36.                 r[ri] = s
  37.                 ri++
  38.         }
  39.         return r
  40. }
  41.  
  42. func save_csv(num int, sec float64, dbtype string) {
  43.         file, _ := os.OpenFile(fmt.Sprintf("bench_%s.csv", dbtype), os.O_CREATE|os.O_APPEND|os.O_RDWR, 0664)
  44.         defer file.Close()
  45.         writer := csv.NewWriter(file)
  46.         record := []string{fmt.Sprintf("%d", num), fmt.Sprintf("%f", sec), dbtype}
  47.         writer.Write(record)
  48.         writer.Flush()
  49. }
  50.  
  51. func timeTrack(start time.Time, name string, num int, dbtype string) {
  52.         elapsed := time.Since(start)
  53.         fmt.Println(name, elapsed, "throughput:", int64(float64(num)/(elapsed.Seconds())), "/sec\n")
  54.         save_csv(num, elapsed.Seconds(), dbtype)
  55. }
  56.  
  57. func runbench(t string, n int) {
  58.         p := fmt.Sprintf("./cache_%d.kc%s", n, t)
  59.         fmt.Println(p)
  60.         defer timeTrack(time.Now(), fmt.Sprintf("%d records, type %s", n, t), n, t)
  61.         db, err := kc.Open(p, kc.WRITE)
  62.         if err != nil {
  63.                 log.Fatal(err)
  64.         }
  65.         defer db.Close()
  66.         for i := 0; i < n; i++ {
  67.                 r := RandStrings(2)
  68.                 k := r[0]
  69.                 v := r[1]
  70.                 db.Set(k, v)
  71.         }
  72.         os.Remove(p)
  73. }
  74.  
  75. func main() {
  76.         fmt.Println("Generated string length:", Maxlen)
  77.         iter := 64000000
  78.         incr := 1000
  79.  
  80.         for i := incr; i < iter+1; i = incr {
  81.                 //runbench("h", i)
  82.                 runbench("t", i)
  83.                 runtime.GC()
  84.                 incr = 2 * i
  85.         }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement