...

Source file src/github.com/peterbourgon/diskv/speed_test.go

Documentation: github.com/peterbourgon/diskv

     1  package diskv
     2  
     3  import (
     4  	"fmt"
     5  	"math/rand"
     6  	"testing"
     7  )
     8  
     9  func shuffle(keys []string) {
    10  	ints := rand.Perm(len(keys))
    11  	for i := range keys {
    12  		keys[i], keys[ints[i]] = keys[ints[i]], keys[i]
    13  	}
    14  }
    15  
    16  func genValue(size int) []byte {
    17  	v := make([]byte, size)
    18  	for i := 0; i < size; i++ {
    19  		v[i] = uint8((rand.Int() % 26) + 97) // a-z
    20  	}
    21  	return v
    22  }
    23  
    24  const (
    25  	keyCount = 1000
    26  )
    27  
    28  func genKeys() []string {
    29  	keys := make([]string, keyCount)
    30  	for i := 0; i < keyCount; i++ {
    31  		keys[i] = fmt.Sprintf("%d", i)
    32  	}
    33  	return keys
    34  }
    35  
    36  func (d *Diskv) load(keys []string, val []byte) {
    37  	for _, key := range keys {
    38  		d.Write(key, val)
    39  	}
    40  }
    41  
    42  func benchRead(b *testing.B, size, cachesz int) {
    43  	b.StopTimer()
    44  	d := New(Options{
    45  		BasePath:     "speed-test",
    46  		Transform:    func(string) []string { return []string{} },
    47  		CacheSizeMax: uint64(cachesz),
    48  	})
    49  	defer d.EraseAll()
    50  
    51  	keys := genKeys()
    52  	value := genValue(size)
    53  	d.load(keys, value)
    54  	shuffle(keys)
    55  	b.SetBytes(int64(size))
    56  
    57  	b.StartTimer()
    58  	for i := 0; i < b.N; i++ {
    59  		_, _ = d.Read(keys[i%len(keys)])
    60  	}
    61  	b.StopTimer()
    62  }
    63  
    64  func benchWrite(b *testing.B, size int, withIndex bool) {
    65  	b.StopTimer()
    66  
    67  	options := Options{
    68  		BasePath:     "speed-test",
    69  		Transform:    func(string) []string { return []string{} },
    70  		CacheSizeMax: 0,
    71  	}
    72  	if withIndex {
    73  		options.Index = &BTreeIndex{}
    74  		options.IndexLess = strLess
    75  	}
    76  
    77  	d := New(options)
    78  	defer d.EraseAll()
    79  	keys := genKeys()
    80  	value := genValue(size)
    81  	shuffle(keys)
    82  	b.SetBytes(int64(size))
    83  
    84  	b.StartTimer()
    85  	for i := 0; i < b.N; i++ {
    86  		d.Write(keys[i%len(keys)], value)
    87  	}
    88  	b.StopTimer()
    89  }
    90  
    91  func BenchmarkWrite__32B_NoIndex(b *testing.B) {
    92  	benchWrite(b, 32, false)
    93  }
    94  
    95  func BenchmarkWrite__1KB_NoIndex(b *testing.B) {
    96  	benchWrite(b, 1024, false)
    97  }
    98  
    99  func BenchmarkWrite__4KB_NoIndex(b *testing.B) {
   100  	benchWrite(b, 4096, false)
   101  }
   102  
   103  func BenchmarkWrite_10KB_NoIndex(b *testing.B) {
   104  	benchWrite(b, 10240, false)
   105  }
   106  
   107  func BenchmarkWrite__32B_WithIndex(b *testing.B) {
   108  	benchWrite(b, 32, true)
   109  }
   110  
   111  func BenchmarkWrite__1KB_WithIndex(b *testing.B) {
   112  	benchWrite(b, 1024, true)
   113  }
   114  
   115  func BenchmarkWrite__4KB_WithIndex(b *testing.B) {
   116  	benchWrite(b, 4096, true)
   117  }
   118  
   119  func BenchmarkWrite_10KB_WithIndex(b *testing.B) {
   120  	benchWrite(b, 10240, true)
   121  }
   122  
   123  func BenchmarkRead__32B_NoCache(b *testing.B) {
   124  	benchRead(b, 32, 0)
   125  }
   126  
   127  func BenchmarkRead__1KB_NoCache(b *testing.B) {
   128  	benchRead(b, 1024, 0)
   129  }
   130  
   131  func BenchmarkRead__4KB_NoCache(b *testing.B) {
   132  	benchRead(b, 4096, 0)
   133  }
   134  
   135  func BenchmarkRead_10KB_NoCache(b *testing.B) {
   136  	benchRead(b, 10240, 0)
   137  }
   138  
   139  func BenchmarkRead__32B_WithCache(b *testing.B) {
   140  	benchRead(b, 32, keyCount*32*2)
   141  }
   142  
   143  func BenchmarkRead__1KB_WithCache(b *testing.B) {
   144  	benchRead(b, 1024, keyCount*1024*2)
   145  }
   146  
   147  func BenchmarkRead__4KB_WithCache(b *testing.B) {
   148  	benchRead(b, 4096, keyCount*4096*2)
   149  }
   150  
   151  func BenchmarkRead_10KB_WithCache(b *testing.B) {
   152  	benchRead(b, 10240, keyCount*4096*2)
   153  }
   154  

View as plain text