# 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