init elowdb go-port commit
This commit is contained in:
152
README.md
Normal file
152
README.md
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user