153 lines
3.5 KiB
Markdown
153 lines
3.5 KiB
Markdown
# LineDB Go Port
|
||
|
||
Это Go порт библиотеки LineDB - NoSQL базы данных на основе JSONL файлов.
|
||
|
||
## Особенности
|
||
|
||
- **JSONL файлы**: Хранение данных в формате JSON Lines
|
||
- **Кэширование**: Встроенный кэш с TTL
|
||
- **Партиционирование**: Поддержка партиционирования данных
|
||
- **Транзакции**: Поддержка транзакций с откатом
|
||
- **Шифрование**: Опциональное шифрование данных
|
||
- **Индексация**: Поддержка индексированных полей
|
||
|
||
## Установка
|
||
|
||
```bash
|
||
go get linedb
|
||
```
|
||
|
||
## Быстрый старт
|
||
|
||
```go
|
||
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
|
||
|
||
### Создание базы данных
|
||
|
||
```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
|
||
|