Merge pull request #272 from kevgs/boltdb_optimize
BoltDB wrapper nano optimization which makes code a bit prettier too
This commit is contained in:
commit
eee4482964
|
@ -17,11 +17,12 @@ import (
|
||||||
type Reader struct {
|
type Reader struct {
|
||||||
store *Store
|
store *Store
|
||||||
tx *bolt.Tx
|
tx *bolt.Tx
|
||||||
|
bucket *bolt.Bucket
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Reader) Get(key []byte) ([]byte, error) {
|
func (r *Reader) Get(key []byte) ([]byte, error) {
|
||||||
var rv []byte
|
var rv []byte
|
||||||
v := r.tx.Bucket([]byte(r.store.bucket)).Get(key)
|
v := r.bucket.Get(key)
|
||||||
if v != nil {
|
if v != nil {
|
||||||
rv = make([]byte, len(v))
|
rv = make([]byte, len(v))
|
||||||
copy(rv, v)
|
copy(rv, v)
|
||||||
|
@ -30,8 +31,7 @@ func (r *Reader) Get(key []byte) ([]byte, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Reader) PrefixIterator(prefix []byte) store.KVIterator {
|
func (r *Reader) PrefixIterator(prefix []byte) store.KVIterator {
|
||||||
b := r.tx.Bucket([]byte(r.store.bucket))
|
cursor := r.bucket.Cursor()
|
||||||
cursor := b.Cursor()
|
|
||||||
|
|
||||||
rv := &Iterator{
|
rv := &Iterator{
|
||||||
store: r.store,
|
store: r.store,
|
||||||
|
@ -45,8 +45,7 @@ func (r *Reader) PrefixIterator(prefix []byte) store.KVIterator {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Reader) RangeIterator(start, end []byte) store.KVIterator {
|
func (r *Reader) RangeIterator(start, end []byte) store.KVIterator {
|
||||||
b := r.tx.Bucket([]byte(r.store.bucket))
|
cursor := r.bucket.Cursor()
|
||||||
cursor := b.Cursor()
|
|
||||||
|
|
||||||
rv := &Iterator{
|
rv := &Iterator{
|
||||||
store: r.store,
|
store: r.store,
|
||||||
|
|
|
@ -85,6 +85,7 @@ func (bs *Store) Reader() (store.KVReader, error) {
|
||||||
return &Reader{
|
return &Reader{
|
||||||
store: bs,
|
store: bs,
|
||||||
tx: tx,
|
tx: tx,
|
||||||
|
bucket: tx.Bucket([]byte(bs.bucket)),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,14 +35,16 @@ func (w *Writer) ExecuteBatch(batch store.KVBatch) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bucket := tx.Bucket([]byte(w.store.bucket))
|
||||||
|
|
||||||
for k, mergeOps := range emulatedBatch.Merger.Merges {
|
for k, mergeOps := range emulatedBatch.Merger.Merges {
|
||||||
kb := []byte(k)
|
kb := []byte(k)
|
||||||
existingVal := tx.Bucket([]byte(w.store.bucket)).Get(kb)
|
existingVal := bucket.Get(kb)
|
||||||
mergedVal, fullMergeOk := w.store.mo.FullMerge(kb, existingVal, mergeOps)
|
mergedVal, fullMergeOk := w.store.mo.FullMerge(kb, existingVal, mergeOps)
|
||||||
if !fullMergeOk {
|
if !fullMergeOk {
|
||||||
return fmt.Errorf("merge operator returned failure")
|
return fmt.Errorf("merge operator returned failure")
|
||||||
}
|
}
|
||||||
err = tx.Bucket([]byte(w.store.bucket)).Put(kb, mergedVal)
|
err = bucket.Put(kb, mergedVal)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -50,12 +52,12 @@ func (w *Writer) ExecuteBatch(batch store.KVBatch) error {
|
||||||
|
|
||||||
for _, op := range emulatedBatch.Ops {
|
for _, op := range emulatedBatch.Ops {
|
||||||
if op.V != nil {
|
if op.V != nil {
|
||||||
err := tx.Bucket([]byte(w.store.bucket)).Put(op.K, op.V)
|
err := bucket.Put(op.K, op.V)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err := tx.Bucket([]byte(w.store.bucket)).Delete(op.K)
|
err := bucket.Delete(op.K)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user