Add checks for bench
This commit is contained in:
parent
13a0879c1d
commit
993efa29b2
@ -29,6 +29,35 @@ func (b *badgerTree) AddChange(key string, value []byte) (err error) {
|
||||
})
|
||||
}
|
||||
|
||||
func (b *badgerTree) GetChange(key string) (val []byte, err error) {
|
||||
badgerKey := fmt.Sprintf("space/%s/tree/%s/change/%s", b.spaceId, b.id, key)
|
||||
err = b.db.View(func(txn *badger.Txn) error {
|
||||
item, err := txn.Get([]byte(badgerKey))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
val, err = item.ValueCopy(val)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (b *badgerTree) HasChange(key string) (has bool, err error) {
|
||||
badgerKey := fmt.Sprintf("space/%s/tree/%s/change/%s", b.spaceId, b.id, key)
|
||||
err = b.db.View(func(txn *badger.Txn) error {
|
||||
_, err := txn.Get([]byte(badgerKey))
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
has = true
|
||||
return
|
||||
}
|
||||
|
||||
type badgerSpace struct {
|
||||
id string
|
||||
db *badger.DB
|
||||
|
||||
@ -4,6 +4,8 @@ type Tree interface {
|
||||
Id() string
|
||||
UpdateHead(head string) (err error)
|
||||
AddChange(key string, value []byte) (err error)
|
||||
GetChange(key string) ([]byte, error)
|
||||
HasChange(key string) (has bool, err error)
|
||||
}
|
||||
|
||||
type Space interface {
|
||||
|
||||
@ -20,7 +20,18 @@ func (p *pogrebTree) UpdateHead(head string) (err error) {
|
||||
}
|
||||
|
||||
func (p *pogrebTree) AddChange(key string, value []byte) (err error) {
|
||||
return p.db.Put([]byte(fmt.Sprintf("t/%s/%s", p.id, key)), value)
|
||||
changeKey := fmt.Sprintf("t/%s/%s", p.id, key)
|
||||
return p.db.Put([]byte(changeKey), value)
|
||||
}
|
||||
|
||||
func (p *pogrebTree) GetChange(key string) (val []byte, err error) {
|
||||
changeKey := fmt.Sprintf("t/%s/%s", p.id, key)
|
||||
return p.db.Get([]byte(changeKey))
|
||||
}
|
||||
|
||||
func (p *pogrebTree) HasChange(key string) (has bool, err error) {
|
||||
changeKey := fmt.Sprintf("t/%s/%s", p.id, key)
|
||||
return p.db.Has([]byte(changeKey))
|
||||
}
|
||||
|
||||
type pogrebSpace struct {
|
||||
@ -54,8 +65,7 @@ type pogrebSpaceCreator struct {
|
||||
func (p *pogrebSpaceCreator) CreateSpace(id string) (Space, error) {
|
||||
dbPath := path.Join(p.rootPath, id)
|
||||
db, err := pogreb.Open(dbPath, &pogreb.Options{
|
||||
BackgroundSyncInterval: 0,
|
||||
BackgroundCompactionInterval: 20000,
|
||||
BackgroundCompactionInterval: 200000,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@ -3,6 +3,8 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/cmd/benchmarks/db"
|
||||
"net/http"
|
||||
_ "net/http/pprof"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
@ -18,6 +20,9 @@ func main() {
|
||||
// defValueSize: 1000,
|
||||
// lenHeadUpdate: 10,
|
||||
//})
|
||||
go func() {
|
||||
fmt.Println(http.ListenAndServe("localhost:6060", nil))
|
||||
}()
|
||||
bench(db.NewPogrebSpaceCreator, options{
|
||||
numSpaces: 1000,
|
||||
numEntriesInSpace: 100,
|
||||
@ -108,7 +113,38 @@ func bench(factory db.SpaceCreatorFactory, opts options) {
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Println(opts.numSpaces*opts.numEntriesInSpace*opts.numChangesInTree, "changes creation, spent ms", time.Now().Sub(now).Milliseconds())
|
||||
total := opts.numSpaces * opts.numEntriesInSpace * opts.numChangesInTree
|
||||
fmt.Println(total, "changes creation, spent ms", time.Now().Sub(now).Milliseconds())
|
||||
now = time.Now()
|
||||
|
||||
// getting some values from tree
|
||||
for _, t := range trees {
|
||||
for i := 0; i < opts.numChangesInTree; i++ {
|
||||
res, err := t.GetChange(changeIdGetter(i))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if res == nil {
|
||||
panic("shouldn't be empty")
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Println(total, "changes getting, spent ms", time.Now().Sub(now).Milliseconds())
|
||||
now = time.Now()
|
||||
|
||||
// getting some values from tree
|
||||
for _, t := range trees {
|
||||
for i := 0; i < opts.numChangesInTree; i++ {
|
||||
b, err := t.HasChange(changeIdGetter(i))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if !b {
|
||||
panic("should be able to check with has")
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Println(total, "changes checking, spent ms", time.Now().Sub(now).Milliseconds())
|
||||
|
||||
exit := make(chan os.Signal, 1)
|
||||
signal.Notify(exit, os.Interrupt, syscall.SIGKILL, syscall.SIGTERM, syscall.SIGQUIT)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user