| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package diskv
- import (
- "fmt"
- "math/rand"
- "testing"
- )
- func shuffle(keys []string) {
- ints := rand.Perm(len(keys))
- for i := range keys {
- keys[i], keys[ints[i]] = keys[ints[i]], keys[i]
- }
- }
- func genValue(size int) []byte {
- v := make([]byte, size)
- for i := 0; i < size; i++ {
- v[i] = uint8((rand.Int() % 26) + 97) // a-z
- }
- return v
- }
- const (
- keyCount = 1000
- )
- func genKeys() []string {
- keys := make([]string, keyCount)
- for i := 0; i < keyCount; i++ {
- keys[i] = fmt.Sprintf("%d", i)
- }
- return keys
- }
- func (d *Diskv) load(keys []string, val []byte) {
- for _, key := range keys {
- d.Write(key, val)
- }
- }
- func benchRead(b *testing.B, size, cachesz int) {
- b.StopTimer()
- d := New(Options{
- BasePath: "speed-test",
- Transform: func(string) []string { return []string{} },
- CacheSizeMax: uint64(cachesz),
- })
- defer d.EraseAll()
- keys := genKeys()
- value := genValue(size)
- d.load(keys, value)
- shuffle(keys)
- b.SetBytes(int64(size))
- b.StartTimer()
- for i := 0; i < b.N; i++ {
- _, _ = d.Read(keys[i%len(keys)])
- }
- b.StopTimer()
- }
- func benchWrite(b *testing.B, size int, withIndex bool) {
- b.StopTimer()
- options := Options{
- BasePath: "speed-test",
- Transform: func(string) []string { return []string{} },
- CacheSizeMax: 0,
- }
- if withIndex {
- options.Index = &BTreeIndex{}
- options.IndexLess = strLess
- }
- d := New(options)
- defer d.EraseAll()
- keys := genKeys()
- value := genValue(size)
- shuffle(keys)
- b.SetBytes(int64(size))
- b.StartTimer()
- for i := 0; i < b.N; i++ {
- d.Write(keys[i%len(keys)], value)
- }
- b.StopTimer()
- }
- func BenchmarkWrite__32B_NoIndex(b *testing.B) {
- benchWrite(b, 32, false)
- }
- func BenchmarkWrite__1KB_NoIndex(b *testing.B) {
- benchWrite(b, 1024, false)
- }
- func BenchmarkWrite__4KB_NoIndex(b *testing.B) {
- benchWrite(b, 4096, false)
- }
- func BenchmarkWrite_10KB_NoIndex(b *testing.B) {
- benchWrite(b, 10240, false)
- }
- func BenchmarkWrite__32B_WithIndex(b *testing.B) {
- benchWrite(b, 32, true)
- }
- func BenchmarkWrite__1KB_WithIndex(b *testing.B) {
- benchWrite(b, 1024, true)
- }
- func BenchmarkWrite__4KB_WithIndex(b *testing.B) {
- benchWrite(b, 4096, true)
- }
- func BenchmarkWrite_10KB_WithIndex(b *testing.B) {
- benchWrite(b, 10240, true)
- }
- func BenchmarkRead__32B_NoCache(b *testing.B) {
- benchRead(b, 32, 0)
- }
- func BenchmarkRead__1KB_NoCache(b *testing.B) {
- benchRead(b, 1024, 0)
- }
- func BenchmarkRead__4KB_NoCache(b *testing.B) {
- benchRead(b, 4096, 0)
- }
- func BenchmarkRead_10KB_NoCache(b *testing.B) {
- benchRead(b, 10240, 0)
- }
- func BenchmarkRead__32B_WithCache(b *testing.B) {
- benchRead(b, 32, keyCount*32*2)
- }
- func BenchmarkRead__1KB_WithCache(b *testing.B) {
- benchRead(b, 1024, keyCount*1024*2)
- }
- func BenchmarkRead__4KB_WithCache(b *testing.B) {
- benchRead(b, 4096, keyCount*4096*2)
- }
- func BenchmarkRead_10KB_WithCache(b *testing.B) {
- benchRead(b, 10240, keyCount*4096*2)
- }
|