init elowdb go-port commit

This commit is contained in:
41 changed files with 7273 additions and 0 deletions

152
README.md Normal file
View File

@@ -0,0 +1,152 @@
# 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