Cleanup
This commit is contained in:
parent
06320cf976
commit
a21ea3a6ef
99
Benchmarks_test.go
Normal file
99
Benchmarks_test.go
Normal file
@ -0,0 +1,99 @@
|
||||
package ocean_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
"git.akyoto.dev/go/assert"
|
||||
"git.akyoto.dev/go/ocean"
|
||||
)
|
||||
|
||||
func BenchmarkGet(b *testing.B) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
|
||||
defer users.Sync()
|
||||
defer users.Clear()
|
||||
|
||||
users.Set("1", &User{Name: "User 1"})
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
user, err := users.Get("1")
|
||||
assert.Nil(b, err)
|
||||
assert.NotNil(b, user)
|
||||
assert.Equal(b, user.Name, "User 1")
|
||||
}
|
||||
})
|
||||
|
||||
b.StopTimer()
|
||||
}
|
||||
|
||||
func BenchmarkSet(b *testing.B) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
|
||||
defer users.Sync()
|
||||
defer users.Clear()
|
||||
|
||||
user := &User{Name: "User 1"}
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
users.Set("1", user)
|
||||
}
|
||||
})
|
||||
|
||||
b.StopTimer()
|
||||
}
|
||||
|
||||
func BenchmarkDelete(b *testing.B) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
|
||||
defer users.Sync()
|
||||
defer users.Clear()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
users.Delete("1")
|
||||
}
|
||||
})
|
||||
|
||||
b.StopTimer()
|
||||
}
|
||||
|
||||
func BenchmarkColdStart(b *testing.B) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
|
||||
defer users.Sync()
|
||||
defer users.Clear()
|
||||
|
||||
b.Run("100", func(b *testing.B) {
|
||||
for i := 0; i < 100; i++ {
|
||||
users.Set(strconv.Itoa(i), &User{Name: fmt.Sprintf("User %d", i)})
|
||||
}
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
for n := 0; n < b.N; n++ {
|
||||
again, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
assert.NotNil(b, again)
|
||||
}
|
||||
|
||||
b.StopTimer()
|
||||
})
|
||||
}
|
@ -78,10 +78,6 @@ func (c *collection[T]) Clear() {
|
||||
|
||||
// Delete deletes a key from the collection.
|
||||
func (c *collection[T]) Delete(key string) {
|
||||
if !c.Exists(key) {
|
||||
return
|
||||
}
|
||||
|
||||
c.data.Delete(key)
|
||||
c.storage.Delete(key)
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
package ocean_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
@ -17,6 +15,7 @@ type User struct {
|
||||
func TestCollection(t *testing.T) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(t, err)
|
||||
|
||||
defer users.Sync()
|
||||
defer users.Clear()
|
||||
|
||||
@ -131,87 +130,3 @@ func TestCollection(t *testing.T) {
|
||||
assert.True(t, !users.Exists("3"))
|
||||
})
|
||||
}
|
||||
|
||||
func BenchmarkGet(b *testing.B) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
defer users.Sync()
|
||||
defer users.Clear()
|
||||
users.Set("1", &User{Name: "User 1"})
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
_, err := users.Get("1")
|
||||
|
||||
if err != nil {
|
||||
b.Fail()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
b.StopTimer()
|
||||
}
|
||||
|
||||
func BenchmarkSet(b *testing.B) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
defer users.Sync()
|
||||
defer users.Clear()
|
||||
user := &User{Name: "User 1"}
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
users.Set("1", user)
|
||||
}
|
||||
})
|
||||
|
||||
b.StopTimer()
|
||||
}
|
||||
|
||||
func BenchmarkDelete(b *testing.B) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
defer users.Sync()
|
||||
defer users.Clear()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
users.Delete("1")
|
||||
}
|
||||
})
|
||||
|
||||
b.StopTimer()
|
||||
}
|
||||
|
||||
func BenchmarkColdStart(b *testing.B) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
defer users.Sync()
|
||||
defer users.Clear()
|
||||
|
||||
b.Run("100", func(b *testing.B) {
|
||||
for i := 0; i < 100; i++ {
|
||||
users.Set(strconv.Itoa(i), &User{Name: fmt.Sprintf("User %d", i)})
|
||||
}
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
for n := 0; n < b.N; n++ {
|
||||
again, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
assert.NotNil(b, again)
|
||||
}
|
||||
|
||||
b.StopTimer()
|
||||
})
|
||||
}
|
||||
|
@ -12,6 +12,8 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
const diskWriteInterval = 100 * time.Millisecond
|
||||
|
||||
type FileStorage[T any] struct {
|
||||
collection *collection[T]
|
||||
dirty atomic.Uint32
|
||||
@ -25,7 +27,7 @@ func (fs *FileStorage[T]) Init(c *collection[T]) error {
|
||||
go fs.flushWorker()
|
||||
|
||||
fileName := filepath.Join(c.root, c.name+".dat")
|
||||
file, err := os.OpenFile(fileName, os.O_RDONLY, 0600)
|
||||
file, err := os.Open(fileName)
|
||||
|
||||
if os.IsNotExist(err) {
|
||||
return nil
|
||||
@ -55,7 +57,7 @@ func (fs *FileStorage[T]) Sync() {
|
||||
|
||||
func (fs *FileStorage[T]) flushWorker() {
|
||||
for {
|
||||
time.Sleep(time.Millisecond)
|
||||
time.Sleep(diskWriteInterval)
|
||||
|
||||
if fs.dirty.Swap(0) == 0 {
|
||||
select {
|
||||
|
Loading…
Reference in New Issue
Block a user