aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorBen Johnson <benbjohnson@yahoo.com>2014-04-29 12:27:38 -0600
committerBen Johnson <benbjohnson@yahoo.com>2014-04-29 12:36:42 -0600
commitcabb44e01f70840e5a7057a1d778f5da968ac77e (patch)
treea86433be37c4e83452b40f8f1f40888774eaddb5 /cmd
parentMerge pull request #145 from benbjohnson/tx-cursor (diff)
downloaddedo-cabb44e01f70840e5a7057a1d778f5da968ac77e.tar.gz
dedo-cabb44e01f70840e5a7057a1d778f5da968ac77e.tar.xz
Add --batch-size to 'bolt bench'.
This commit adds a --batch-size CLI argument to the 'bolt bench' tool. This argument will insert into Bolt in smaller batches which is a more typical use case. /cc @snormore
Diffstat (limited to 'cmd')
-rw-r--r--cmd/bolt/bench.go42
-rw-r--r--cmd/bolt/main.go2
2 files changed, 33 insertions, 11 deletions
diff --git a/cmd/bolt/bench.go b/cmd/bolt/bench.go
index 72144b8..193687b 100644
--- a/cmd/bolt/bench.go
+++ b/cmd/bolt/bench.go
@@ -88,22 +88,41 @@ func benchWrite(db *bolt.DB, options *BenchOptions, results *BenchResults) error
}
func benchWriteSequential(db *bolt.DB, options *BenchOptions, results *BenchResults) error {
- results.WriteOps = options.Iterations
+ // Default batch size to iteration count, if not specified.
+ var batchSize, iterations = options.BatchSize, options.Iterations
+ if batchSize == 0 {
+ batchSize = iterations
+ }
+
+ // Insert in batches.
+ var count int
+ for i := 0; i < (iterations/batchSize)+1; i++ {
+ err := db.Update(func(tx *bolt.Tx) error {
+ b, _ := tx.CreateBucketIfNotExists(benchBucketName)
+
+ for j := 0; j < batchSize && count < iterations; j++ {
+ var key = make([]byte, options.KeySize)
+ var value = make([]byte, options.ValueSize)
+ binary.BigEndian.PutUint32(key, uint32(count))
- return db.Update(func(tx *bolt.Tx) error {
- b, _ := tx.CreateBucketIfNotExists(benchBucketName)
+ if err := b.Put(key, value); err != nil {
+ return err
+ }
- for i := 0; i < options.Iterations; i++ {
- var key = make([]byte, options.KeySize)
- var value = make([]byte, options.ValueSize)
- binary.BigEndian.PutUint32(key, uint32(i))
- if err := b.Put(key, value); err != nil {
- return err
+ count++
}
+
+ return nil
+ })
+ if err != nil {
+ return err
}
+ }
- return nil
- })
+ // Update the write op count.
+ results.WriteOps = count
+
+ return nil
}
// Reads from the database.
@@ -213,6 +232,7 @@ type BenchOptions struct {
WriteMode string
ReadMode string
Iterations int
+ BatchSize int
KeySize int
ValueSize int
CPUProfile string
diff --git a/cmd/bolt/main.go b/cmd/bolt/main.go
index 719bf00..54e1796 100644
--- a/cmd/bolt/main.go
+++ b/cmd/bolt/main.go
@@ -98,6 +98,7 @@ func NewApp() *cli.App {
&cli.StringFlag{Name: "write-mode", Value: "seq", Usage: "Write mode"},
&cli.StringFlag{Name: "read-mode", Value: "seq", Usage: "Read mode"},
&cli.IntFlag{Name: "count", Value: 1000, Usage: "Item count"},
+ &cli.IntFlag{Name: "batch-size", Usage: "Insert batch size"},
&cli.IntFlag{Name: "key-size", Value: 8, Usage: "Key size"},
&cli.IntFlag{Name: "value-size", Value: 32, Usage: "Value size"},
&cli.StringFlag{Name: "cpuprofile", Usage: "CPU profile output path"},
@@ -110,6 +111,7 @@ func NewApp() *cli.App {
WriteMode: c.String("write-mode"),
ReadMode: c.String("read-mode"),
Iterations: c.Int("count"),
+ BatchSize: c.Int("batch-size"),
KeySize: c.Int("key-size"),
ValueSize: c.Int("value-size"),
CPUProfile: c.String("cpuprofile"),