Skip to content

Instantly share code, notes, and snippets.

@mattn
Last active March 30, 2019 18:05
Show Gist options
  • Select an option

  • Save mattn/3990033f7bc8a57cd5b86edefb254332 to your computer and use it in GitHub Desktop.

Select an option

Save mattn/3990033f7bc8a57cd5b86edefb254332 to your computer and use it in GitHub Desktop.
benchmark with bolt, goleveldb, pogreb for writing
package main
import (
"fmt"
"log"
"github.com/boltdb/bolt"
)
func main() {
db, err := bolt.Open("boltdb", 0600, nil)
if err != nil {
log.Fatal(err)
}
defer db.Close()
db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucketIfNotExists([]byte("MyBucket"))
if err != nil {
return err
}
for i := 0; i < 100000; i++ {
b.Put([]byte(fmt.Sprintf("foo%06d", i)), []byte("bar"))
}
return nil
})
}
package main
import (
"fmt"
"log"
"github.com/syndtr/goleveldb/leveldb"
)
func main() {
db, err := leveldb.OpenFile("goleveldb", nil)
if err != nil {
log.Fatal(err)
}
defer db.Close()
for i := 0; i < 100000; i++ {
db.Put([]byte(fmt.Sprintf("foo%06d", i)), []byte("bar"), nil)
}
}
package main
import (
"fmt"
"log"
"github.com/akrylysov/pogreb"
)
func main() {
db, err := pogreb.Open("pogrebdb", nil)
if err != nil {
log.Fatal(err)
}
defer db.Close()
for i := 0; i < 100000; i++ {
db.Put([]byte(fmt.Sprintf("foo%06d", i)), []byte("bar"))
}
}
@mattn
Copy link
Copy Markdown
Author

mattn commented Jan 10, 2018

bolt

real    0.512
system  0.046
user    0.312

goleveldb

real    0.823
system  0.265
user    0.405

pogreb

real    5.687
system  2.527
user    0.686

@xeoncross
Copy link
Copy Markdown

Correct me if I'm wrong, but it looks like the boltdb update is wrapped in a single transaction which should give it an unfair advantage.

@akrylysov
Copy link
Copy Markdown

Keep in mind Pogreb v0.8 doubled write performance on non-Windows.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment