💿 In-memory key value store that saves your data to disk using JSON.
29 Commits
.editorconfig | ||
.gitignore | ||
Collection_test.go | ||
Collection.go | ||
Decoder.go | ||
Encoder.go | ||
Errors.go | ||
go.mod | ||
go.sum | ||
LICENSE | ||
README.md |
ocean
In-memory key value store that saves your data to plain old JSON files.
If you like, you can operate on your entire data with classic UNIX tools.
Installation
go get git.akyoto.dev/go/ocean
Example
// User data
type User struct {
Name string
}
// Load existing data from ~/.ocean/User/
users := ocean.New[User]()
// Store in memory and also store in ~/.ocean/User/1
users.Set("1", &User{Name: "User 1"})
// Read from memory
firstUser, err := users.Get("1")
// Iterate over all users
for user := range users.All() {
fmt.Println(user.Name)
}
In a real project you would usually prefix your collections with a project or company name:
// Data saved to ~/.ocean/google/User/
users := ocean.New[User]("google")
You can add as many directory hierarchies as you need but I recommend using a simple /namespace/collection/
structure.
Limitations
-
Keys cannot be empty and they cannot contain a directory separator like
/
. -
This storage mechanism is only suitable for small to medium data volume.
Ocean isn't meant to be used for big data, however the package is very lightweight so you can combine it with a big data store.