before merge to main
This commit is contained in:
74
examples/custom-serializer/main.go
Normal file
74
examples/custom-serializer/main.go
Normal file
@@ -0,0 +1,74 @@
|
||||
// Пример использования KeyOrder в опциях коллекции — встроенная сортировка ключей при сериализации.
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"linedb/pkg/linedb"
|
||||
)
|
||||
|
||||
// Item — структура для вставки (LineDB поддерживает struct и map)
|
||||
type Item struct {
|
||||
Name string `json:"name"`
|
||||
Value int `json:"value"`
|
||||
Active bool `json:"active"`
|
||||
Atime string `json:"atime"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
os.RemoveAll("./data")
|
||||
|
||||
// KeyOrder в опциях коллекции — при задании используется кастомная сериализация с порядком ключей
|
||||
initOptions := &linedb.LineDbInitOptions{
|
||||
CacheSize: 100,
|
||||
CacheTTL: time.Minute,
|
||||
DBFolder: "./data",
|
||||
Collections: []linedb.JSONLFileOptions{
|
||||
{
|
||||
CollectionName: "items",
|
||||
AllocSize: 256,
|
||||
KeyOrder: []linedb.KeyOrder{
|
||||
{Key: "id", Order: 0},
|
||||
{Key: "atime", Order: -1},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
db := linedb.NewLineDb(nil)
|
||||
if err := db.Init(false, initOptions); err != nil {
|
||||
log.Fatalf("Init failed: %v", err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
opts := linedb.LineDbAdapterOptions{}
|
||||
|
||||
// Инсерты: map и структуры (LineDB принимает оба)
|
||||
items := []any{
|
||||
map[string]any{"Value": 42, "Name": "Test", "Active": true, "atime": "2024-01-01"},
|
||||
map[string]any{"Active": false, "Name": "Alice", "Value": 100, "atime": "2024-01-02"},
|
||||
map[string]any{"Name": "Bob", "Value": 0, "Active": true, "atime": "2024-01-03"},
|
||||
Item{Name: "Charlie", Value: 7, Active: true, Atime: "2024-01-04"},
|
||||
Item{Name: "Diana", Value: 99, Active: false, Atime: "2024-01-05"},
|
||||
}
|
||||
if err := db.Insert(items, "items", opts); err != nil {
|
||||
log.Fatalf("Insert failed: %v", err)
|
||||
}
|
||||
|
||||
// Read
|
||||
all, err := db.Read("items", opts)
|
||||
if err != nil {
|
||||
log.Fatalf("Read failed: %v", err)
|
||||
}
|
||||
|
||||
fmt.Printf("Records: %d\n", len(all))
|
||||
for _, r := range all {
|
||||
fmt.Printf(" %+v\n", r)
|
||||
}
|
||||
|
||||
raw, _ := os.ReadFile("./data/items.jsonl")
|
||||
fmt.Printf("\nRaw file:\n%s\n", string(raw))
|
||||
}
|
||||
Reference in New Issue
Block a user