Skip to content

Commit

Permalink
Code to populate leveldb and do random reads.
Browse files Browse the repository at this point in the history
  • Loading branch information
manishrjain committed Apr 5, 2018
1 parent 3cff3cf commit 58bf5f8
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 26 deletions.
81 changes: 56 additions & 25 deletions bench_test.go
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/dgraph-io/badger"
"github.com/dgraph-io/badger/options"
"github.com/dgraph-io/badger/y"
"github.com/syndtr/goleveldb/leveldb"
)

var (
Expand All @@ -32,7 +33,7 @@ func getBadger() (*badger.DB, error) {
opt.TableLoadingMode = options.LoadToRAM
opt.Dir = *flagDir + "/badger"
opt.ValueDir = opt.Dir
opt.DoNotCompact = true
opt.ReadOnly = true
return badger.Open(opt)
}

Expand All @@ -42,6 +43,12 @@ func getBadger() (*badger.DB, error) {
// return rdb
// }

func getLevelDB() *leveldb.DB {
ldb, err := leveldb.OpenFile(*flagDir+"/level/l.db", nil)
y.Check(err)
return ldb
}

func getBoltDB() *bolt.DB {
opts := bolt.DefaultOptions
opts.ReadOnly = true
Expand Down Expand Up @@ -108,34 +115,36 @@ func BenchmarkReadRandomBadger(b *testing.B) {
y.Check(err)
defer bdb.Close()

read := func(txn *badger.Txn, key []byte) error {
item, err := txn.Get(key)
if err != nil {
return err
}
val, err := item.Value()
if err != nil {
return err
}
y.AssertTruef(len(val) == *flagValueSize,
"Assertion failed. value size is %d, expected %d", len(val), *flagValueSize)
return nil
}

runRandomReadBenchmark(b, "badger", func(c *hitCounter, pb *testing.PB) {
var item *badger.Item
var err error
for pb.Next() {
key := newKey()
err := bdb.View(func(txn *badger.Txn) error {
item, err = txn.Get(key)
err := bdb.View(func(txn *badger.Txn) error {
for pb.Next() {
key := newKey()
err := read(txn, key)
if err == badger.ErrKeyNotFound {
c.notFound++
return nil
}
if err != nil {
return err
}
val, err := item.Value()
if err != nil {
return err
} else if err != nil {
c.errored++
} else {
c.found++
}

y.AssertTruef(len(val) == *flagValueSize,
"Assertion failed. value size is %d, expected %d", len(val), *flagValueSize)
c.found++
return nil
})
if err != nil {
c.errored++
}
}
return nil
})
y.Check(err)
})
}

Expand All @@ -154,6 +163,27 @@ func BenchmarkReadRandomBadger(b *testing.B) {
// })
// }

func BenchmarkReadRandomLevel(b *testing.B) {
ldb := getLevelDB()
defer ldb.Close()

runRandomReadBenchmark(b, "leveldb", func(c *hitCounter, pb *testing.PB) {
for pb.Next() {
key := newKey()
v, err := ldb.Get(key, nil)
if err == leveldb.ErrNotFound {
c.notFound++
} else if err != nil {
c.errored++
} else {
y.AssertTruef(len(v) == *flagValueSize,
"Assertion failed. value size is %d, expected %d", len(v), *flagValueSize)
c.found++
}
}
})
}

func BenchmarkReadRandomBolt(b *testing.B) {
boltdb := getBoltDB()
defer boltdb.Close()
Expand All @@ -169,7 +199,8 @@ func BenchmarkReadRandomBolt(b *testing.B) {
c.notFound++
continue
}
y.AssertTruef(len(v) == *flagValueSize, "Assertion failed. value size is %d, expected %d", len(v), *flagValueSize)
y.AssertTruef(len(v) == *flagValueSize,
"Assertion failed. value size is %d, expected %d", len(v), *flagValueSize)
c.found++
}
return nil
Expand Down
28 changes: 27 additions & 1 deletion populate/main.go
Expand Up @@ -21,6 +21,8 @@ import (
"github.com/dgraph-io/badger/y"
"github.com/paulbellamy/ratecounter"
"github.com/pkg/profile"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/opt"
)

const mil float64 = 1000000
Expand Down Expand Up @@ -56,6 +58,7 @@ var bdb *badger.DB

// var rdb *store.Store
var boltdb *bolt.DB
var ldb *leveldb.DB

func writeBatch(entries []*entry) int {
for _, e := range entries {
Expand All @@ -71,6 +74,16 @@ func writeBatch(entries []*entry) int {
y.Check(txn.Commit(nil))
}

if ldb != nil {
batch := new(leveldb.Batch)
for _, e := range entries {
batch.Put(e.Key, e.Value)
}
wopt := &opt.WriteOptions{}
wopt.Sync = true
y.Check(ldb.Write(batch, wopt))
}

// if rdb != nil {
// rb := rdb.NewWriteBatch()
// defer rb.Destroy()
Expand Down Expand Up @@ -170,6 +183,14 @@ func main() {
})
y.Check(err)

} else if *which == "leveldb" {
init = true
fmt.Println("Init LevelDB")
os.RemoveAll(*dir + "/level")
os.MkdirAll(*dir+"/level", 0777)
ldb, err = leveldb.OpenFile(*dir+"/level/l.db", nil)
y.Check(err)

} else {
log.Fatalf("Invalid value for option kv: '%s'", *which)
}
Expand Down Expand Up @@ -204,7 +225,7 @@ func main() {
}
}()

N := 12
N := 32
var wg sync.WaitGroup
for i := 0; i < N; i++ {
wg.Add(1)
Expand Down Expand Up @@ -244,6 +265,11 @@ func main() {
// rdb.Close()
// }

if ldb != nil {
fmt.Println("closing leveldb")
ldb.Close()
}

if boltdb != nil {
fmt.Println("closing bolt")
boltdb.Close()
Expand Down

0 comments on commit 58bf5f8

Please sign in to comment.