50 lines
1.1 KiB
Markdown
Raw Normal View History

2023-07-04 21:35:20 +00:00
# ocean
2023-07-05 20:07:43 +00:00
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.
2023-07-06 12:41:36 +00:00
## Installation
2023-07-06 12:34:22 +00:00
2023-07-06 12:42:25 +00:00
```shell
2023-07-06 12:41:36 +00:00
go get git.akyoto.dev/go/ocean
2023-07-06 12:34:22 +00:00
```
2023-07-06 12:31:23 +00:00
2023-07-06 12:48:29 +00:00
## Example
2023-07-06 12:34:22 +00:00
```go
2023-07-06 12:41:36 +00:00
// User data
type User struct {
Name string
}
2023-07-06 13:02:50 +00:00
// Load existing data from ~/.ocean/User/
users := ocean.New[User]()
2023-07-06 12:31:23 +00:00
2023-07-06 13:02:50 +00:00
// Store in memory and also store in ~/.ocean/User/1.json
2023-07-06 12:10:12 +00:00
users.Set("1", &User{Name: "User 1"})
2023-07-06 12:48:29 +00:00
2023-07-06 13:02:50 +00:00
// Read from memory
2023-07-06 13:15:51 +00:00
firstUser, err := users.Get("1")
// Iterate over all users
for user := range users.All() {
fmt.Println(user.Name)
}
2023-07-06 12:10:12 +00:00
```
2023-07-06 12:27:48 +00:00
2023-07-06 12:34:22 +00:00
In a real project you would usually prefix your collections with a project or company name:
2023-07-06 12:27:48 +00:00
```go
// Data saved to ~/.ocean/google/User/
2023-07-06 13:02:50 +00:00
users := ocean.New[User]("google")
2023-07-06 12:27:48 +00:00
```
2023-07-06 12:41:36 +00:00
You can add as many directory hierarchies as you need but I recommend using a simple `/namespace/collection/` structure.
2023-07-06 13:12:29 +00:00
## Limitations
This storage mechanism is suitable for small to medium data volume.
It is not suited for big data, however the package is pretty lightweight so you can combine it with a big data store.