Files
elowdb-go/README.md
2026-04-07 15:04:38 +06:00

3.5 KiB
Raw Blame History

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