LineDB Go Port
Это Go порт библиотеки LineDB - NoSQL базы данных на основе JSONL файлов.
Особенности
- JSONL файлы: Хранение данных в формате JSON Lines
- Кэширование: Встроенный кэш с TTL
- Партиционирование: Поддержка партиционирования данных
- Транзакции: Поддержка транзакций с откатом
- Шифрование: Опциональное шифрование данных
- Индексация: Поддержка индексированных полей
Установка
go get linedb
Быстрый старт
package main
import (
"log"
"time"
"direct-dev.ru/gitea/GiteaAdmin/elowdb-go"
)
func main() {
// Создаем опции инициализации
initOptions := &linedb.LineDbInitOptions{
CacheSize: 1000,
CacheTTL: 5 * time.Minute,
DBFolder: "./data",
Collections: []linedb.JSONLFileOptions{
{
CollectionName: "users",
AllocSize: 512,
IndexedFields: []string{"id", "email", "name"},
},
},
}
// Создаем базу данных
db := linedb.NewLineDb(nil)
// Инициализируем базу данных
if err := db.Init(false, initOptions); err != nil {
log.Fatal(err)
}
defer db.Close()
// Вставляем данные
user := map[string]any{
"name": "John Doe",
"email": "john@example.com",
"age": 30,
}
if err := db.Insert(user, "users", linedb.LineDbAdapterOptions{}); err != nil {
log.Fatal(err)
}
// Читаем данные
users, err := db.Read("users", linedb.LineDbAdapterOptions{})
if err != nil {
log.Fatal(err)
}
log.Printf("Users: %+v", users)
}
API
Создание базы данных
db := linedb.NewLineDb(options, adapters...)
Инициализация
err := db.Init(force, initOptions)
CRUD операции
// Вставка
err := db.Insert(data, collectionName, options)
// Чтение
data, err := db.Read(collectionName, options)
// Обновление
updated, err := db.Update(updateData, collectionName, filter, options)
// Удаление
deleted, err := db.Delete(filter, collectionName, options)
Фильтрация
// Фильтр по полям
filter := map[string]any{"name": "John"}
results, err := db.ReadByFilter(filter, collectionName, options)
// Строковый фильтр
results, err := db.ReadByFilter("name===John", collectionName, options)
Партиционирование
initOptions := &linedb.LineDbInitOptions{
Collections: []linedb.JSONLFileOptions{
{CollectionName: "orders"},
},
Partitions: []linedb.PartitionCollection{
{
CollectionName: "orders",
PartIDFn: func(item any) string {
if itemMap, ok := item.(map[string]any); ok {
return toString(itemMap["userId"])
}
return "default"
},
},
},
}
Тестирование
cd go-port
go test ./tests/...
Примеры
Смотрите папку examples/ для дополнительных примеров использования.
Лицензия
MIT
Description
Languages
Go
96.9%
Shell
1.9%
Makefile
1.2%