Files
elowdb-go/README.md

153 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LineDB Go Port
Это Go порт библиотеки LineDB - NoSQL базы данных на основе JSONL файлов.
## Особенности
- **JSONL файлы**: Хранение данных в формате JSON Lines
- **Кэширование**: Встроенный кэш с TTL
- **Партиционирование**: Поддержка партиционирования данных
- **Транзакции**: Поддержка транзакций с откатом
- **Шифрование**: Опциональное шифрование данных
- **Индексация**: Поддержка индексированных полей
## Установка
```bash
go get linedb
```
## Быстрый старт
```go
package main
import (
"log"
"time"
"linedb/pkg/linedb"
)
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
### Создание базы данных
```go
db := linedb.NewLineDb(options, adapters...)
```
### Инициализация
```go
err := db.Init(force, initOptions)
```
### CRUD операции
```go
// Вставка
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)
```
### Фильтрация
```go
// Фильтр по полям
filter := map[string]any{"name": "John"}
results, err := db.ReadByFilter(filter, collectionName, options)
// Строковый фильтр
results, err := db.ReadByFilter("name===John", collectionName, options)
```
### Партиционирование
```go
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"
},
},
},
}
```
## Тестирование
```bash
cd go-port
go test ./tests/...
```
## Примеры
Смотрите папку `examples/` для дополнительных примеров использования.
## Лицензия
MIT