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 17:40:33 +00:00
|
|
|
// Store in memory and also store in ~/.ocean/User/1
|
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
|
|
|
|
|
2023-07-06 14:51:38 +00:00
|
|
|
* Keys cannot be empty and they cannot contain a directory separator like `/`.
|
2023-07-06 13:12:29 +00:00
|
|
|
|
2023-07-06 14:51:38 +00:00
|
|
|
* 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.
|