From 5c9528bce41700484b019207cbb7144f4c764fb2 Mon Sep 17 00:00:00 2001 From: claudemiro Date: Thu, 1 Sep 2016 23:42:55 -0300 Subject: [PATCH] Reverting to slicebased memdb after checking benchmark. --- ipe/db.go | 42 +++++++++++++++--------------------------- ipe/db_test.go | 13 +++++++++++++ 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/ipe/db.go b/ipe/db.go index 907ac8f..800b92e 100644 --- a/ipe/db.go +++ b/ipe/db.go @@ -18,50 +18,38 @@ type db interface { AddApp(*app) error } -// memdb is an in memory implementation of db interface type memdb struct { - IDMutex sync.Mutex - KeyMutex sync.Mutex - AppsByAppID map[string]*app - AppsByKey map[string]*app + sync.Mutex + Apps []*app } -func newMemdb() *memdb { - return &memdb{ - AppsByAppID: make(map[string]*app), - AppsByKey: make(map[string]*app), - } +func newMemdb() db { + return &memdb{} } func (db *memdb) AddApp(a *app) error { - db.IDMutex.Lock() - db.AppsByAppID[a.AppID] = a - db.IDMutex.Unlock() - - db.KeyMutex.Lock() - db.AppsByKey[a.Key] = a - db.KeyMutex.Unlock() + db.Lock() + db.Apps = append(db.Apps, a) + db.Unlock() return nil } // GetAppByAppID returns an App with by appID func (db *memdb) GetAppByAppID(appID string) (*app, error) { - db.IDMutex.Lock() - a, ok := db.AppsByAppID[appID] - db.IDMutex.Unlock() - if ok { - return a, nil + for _, a := range db.Apps { + if a.AppID == appID { + return a, nil + } } return nil, errors.New("App not found") } // GetAppByKey returns an App with by key func (db *memdb) GetAppByKey(key string) (*app, error) { - db.KeyMutex.Lock() - a, ok := db.AppsByKey[key] - db.KeyMutex.Unlock() - if ok { - return a, nil + for _, a := range db.Apps { + if a.Key == key { + return a, nil + } } return nil, errors.New("App not found") } diff --git a/ipe/db_test.go b/ipe/db_test.go index 3ee0012..31b61c5 100644 --- a/ipe/db_test.go +++ b/ipe/db_test.go @@ -6,6 +6,19 @@ package ipe import "testing" +func Benchmark_memdb_GetAppByAppID(b *testing.B) { + db := newMemdb() + db.AddApp(&app{AppID: "123456", Name: "Example"}) + db.AddApp(&app{AppID: "654321", Name: "Example2"}) + db.AddApp(&app{AppID: "678901", Name: "Example3"}) + + b.ResetTimer() + + for i := 0; i < b.N; i++ { + db.GetAppByAppID("123456") + } +} + func Test_db_GetAppByAppID(t *testing.T) { app := &app{AppID: "123456", Name: "Example"}