Skip to content

Instantly share code, notes, and snippets.

@qianbin
Last active August 8, 2022 15:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save qianbin/dcc0ee1fb5a5582c6991c4deecb1a855 to your computer and use it in GitHub Desktop.
Save qianbin/dcc0ee1fb5a5582c6991c4deecb1a855 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"log"
"math/rand"
"os"
"path"
"time"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/filter"
"github.com/syndtr/goleveldb/leveldb/opt"
"github.com/syndtr/goleveldb/leveldb/storage"
)
func main() {
dbPath := path.Join(os.TempDir(), "goleveldb-stress")
os.RemoveAll(dbPath)
stor, err := storage.OpenFile(dbPath, false)
if err != nil {
log.Fatal(err)
}
db, err := leveldb.Open(stor, &opt.Options{
Filter: filter.NewBloomFilter(10),
})
if err != nil {
log.Fatal(err)
}
defer db.Close()
fmt.Println("open database", dbPath)
t := time.Now()
var (
key [100]byte
value [100]byte
batch leveldb.Batch
)
for i := 0; i < 256; i++ {
for j := 0; j < 50000000/256; j++ {
key[0] = byte(i)
rand.Read(key[1:])
rand.Read(value[:])
batch.Put(key[:], value[:])
if batch.Len() >= 500 {
if err := db.Write(&batch, nil); err != nil {
log.Fatal(err)
}
batch.Reset()
}
}
}
if batch.Len() > 0 {
if err := db.Write(&batch, nil); err != nil {
log.Fatal(err)
}
batch.Reset()
}
fmt.Println("time cost:", time.Since(t))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment