Add checks for bench

This commit is contained in:
mcrakhman 2022-10-11 23:01:41 +02:00 committed by Mikhail Iudin
parent 13a0879c1d
commit 993efa29b2
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
4 changed files with 81 additions and 4 deletions

View File

@ -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

View File

@ -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 {

View File

@ -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

View File

@ -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)