From 904f6b19a0c173e03701d398f3bfccf506d19cca Mon Sep 17 00:00:00 2001 From: James Mills <1290234+prologic@users.noreply.github.com> Date: Wed, 13 Mar 2019 07:41:00 +1000 Subject: [PATCH] Improve read performance by ~6x for active Datafile by not reopening it each time --- bitcask.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/bitcask.go b/bitcask.go index 4a8b923..3f10490 100644 --- a/bitcask.go +++ b/bitcask.go @@ -43,11 +43,22 @@ func (b *Bitcask) Get(key string) ([]byte, error) { return nil, ErrKeyNotFound } - df, err := NewDatafile(b.path, item.FileID, true) - if err != nil { - return nil, err + var ( + df *Datafile + err error + ) + + // Optimization + if item.FileID == b.curr.id { + df = b.curr + } else { + // TODO: Pre-open non-active Datafiles and cache the file pointers? + df, err = NewDatafile(b.path, item.FileID, true) + if err != nil { + return nil, err + } + defer df.Close() } - defer df.Close() e, err := df.ReadAt(item.Index) if err != nil {