mirror of
https://github.com/netbirdio/netbird.git
synced 2024-12-24 15:48:52 +01:00
32880c56a4
Restructure data handling for improved performance and flexibility. Introduce 'G'-prefixed fields to represent Gorm relations, simplifying resource management. Eliminate complexity in lookup tables for enhanced query and write speed. Enable independent operations on data structures, requiring adjustments in the Store interface and Account Manager.
89 lines
2.1 KiB
Go
89 lines
2.1 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type benchCase struct {
|
|
name string
|
|
storeFn func(b *testing.B) Store
|
|
size int
|
|
}
|
|
|
|
var newFs = func(b *testing.B) Store {
|
|
store, _ := NewFileStore(b.TempDir(), nil)
|
|
return store
|
|
}
|
|
|
|
var newSqlite = func(b *testing.B) Store {
|
|
store, _ := NewSqliteStore(b.TempDir(), nil)
|
|
return store
|
|
}
|
|
|
|
func BenchmarkTest_StoreWrite(b *testing.B) {
|
|
cases := []benchCase{
|
|
{name: "FileStore_Write", storeFn: newFs, size: 100},
|
|
{name: "SqliteStore_Write", storeFn: newSqlite, size: 100},
|
|
{name: "FileStore_Write", storeFn: newFs, size: 500},
|
|
{name: "SqliteStore_Write", storeFn: newSqlite, size: 500},
|
|
{name: "FileStore_Write", storeFn: newFs, size: 1000},
|
|
{name: "SqliteStore_Write", storeFn: newSqlite, size: 1000},
|
|
{name: "FileStore_Write", storeFn: newFs, size: 2000},
|
|
{name: "SqliteStore_Write", storeFn: newSqlite, size: 2000},
|
|
}
|
|
|
|
for _, c := range cases {
|
|
name := fmt.Sprintf("%s_%d", c.name, c.size)
|
|
store := c.storeFn(b)
|
|
|
|
for i := 0; i < c.size; i++ {
|
|
_ = newAccount(store, i)
|
|
}
|
|
|
|
b.Run(name, func(b *testing.B) {
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
i := c.size
|
|
for pb.Next() {
|
|
i++
|
|
err := newAccount(store, i)
|
|
require.NoError(b, err)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkTest_StoreRead(b *testing.B) {
|
|
cases := []benchCase{
|
|
{name: "FileStore_Read", storeFn: newFs, size: 100},
|
|
{name: "SqliteStore_Read", storeFn: newSqlite, size: 100},
|
|
{name: "FileStore_Read", storeFn: newFs, size: 500},
|
|
{name: "SqliteStore_Read", storeFn: newSqlite, size: 500},
|
|
{name: "FileStore_Read", storeFn: newFs, size: 1000},
|
|
{name: "SqliteStore_Read", storeFn: newSqlite, size: 1000},
|
|
}
|
|
|
|
for _, c := range cases {
|
|
name := fmt.Sprintf("%s_%d", c.name, c.size)
|
|
store := c.storeFn(b)
|
|
|
|
for i := 0; i < c.size; i++ {
|
|
_ = newAccount(store, i)
|
|
}
|
|
|
|
accounts := store.GetAllAccounts()
|
|
id := accounts[c.size-1].Id
|
|
|
|
b.Run(name, func(b *testing.B) {
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
_, _ = store.GetAccount(id)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
}
|