# Примеры использования LineDb Этот каталог содержит примеры использования библиотеки LineDb, переведенные с TypeScript тестов. ## Структура примеров ### 1. `basic/` - Базовые операции Простой пример демонстрирующий основные CRUD операции: - Создание базы данных - Вставка данных - Чтение данных - Фильтрация - Обновление и удаление ### 2. `delete/` - Операции удаления Примеры на основе теста `LineDbv2.delete.vi.test.ts`: - Удаление одной записи по ID - Удаление по текстовому фильтру - Удаление нескольких записей по массиву - Удаление по частичному совпадению - Удаление из партиционированных коллекций - Обработка краевых случаев - Тест производительности ### 3. `insert/` - Операции вставки Примеры на основе теста `LineDbv2.insert.vi.test.ts`: - Вставка одной записи - Вставка массива записей - Автоматическая генерация ID - Вставка в партиционированные коллекции - Проверка уникальности - Работа с разными типами данных - Массовая вставка - Работа с несколькими коллекциями ### 4. `integration/` - Интеграционные тесты Примеры на основе теста `LineDbv2.integration.vi.test.ts`: - Базовые CRUD операции - Сложные запросы и фильтрация - Работа с несколькими коллекциями - Тест производительности - HTTP API сервер ### 5. `custom-json/` - Настраиваемые функции сериализации JSON Демонстрирует использование настраиваемых функций сериализации и десериализации JSON: - Использование go-json (по умолчанию) - Использование стандартного encoding/json - Кастомные функции сериализации с дополнительной логикой ## Запуск примеров ### Базовый пример ```bash cd examples/basic go run main.go ``` ### Примеры удаления ```bash cd examples/delete go run main.go ``` ### Примеры вставки ```bash cd examples/insert go run main.go ``` ### Интеграционные тесты ```bash cd examples/integration go run main.go ``` ### Настраиваемые функции JSON ```bash cd examples/custom-json go run main.go ``` ## Особенности примеров ### Партиционирование Примеры демонстрируют работу с партиционированными коллекциями, где данные автоматически распределяются по файлам на основе значения определенного поля. ### Кэширование Показана работа с кэшем для улучшения производительности чтения данных. ### Фильтрация Демонстрируются различные способы фильтрации: - Объектные фильтры - Строковые фильтры - Частичное совпадение - Строгое сравнение ### Производительность Примеры включают тесты производительности для массовых операций. ### HTTP API Интеграционный пример включает простой HTTP сервер с REST API для работы с базой данных. ### Настраиваемые функции сериализации JSON Библиотека поддерживает настраиваемые функции сериализации и десериализации JSON: ```go // Функции сериализации по умолчанию (используют go-json) func defaultJSONMarshal(v any) ([]byte, error) { return json.Marshal(v) } func defaultJSONUnmarshal(data []byte, v any) error { return json.Unmarshal(data, v) } // Настройка в опциях коллекции initOptions := &linedb.LineDbInitOptions{ Collections: []linedb.JSONLFileOptions{ { CollectionName: "users", JSONMarshal: customMarshalFunction, JSONUnmarshal: customUnmarshalFunction, }, }, } ``` По умолчанию используется библиотека [go-json](https://github.com/goccy/go-json), но вы можете указать любые функции сериализации, соответствующие сигнатурам: - `func(any) ([]byte, error)` для Marshal - `func([]byte, any) error` для Unmarshal ## Структуры данных Примеры используют следующие основные структуры данных: ```go // Пользователь type User struct { ID int `json:"id"` Username string `json:"username"` Email string `json:"email"` IsActive bool `json:"isActive"` Role string `json:"role"` CreatedAt int64 `json:"createdAt"` } // Продукт type Product struct { ID int `json:"id"` Name string `json:"name"` Price float64 `json:"price"` Category string `json:"category"` InStock bool `json:"inStock"` SellerID int `json:"sellerId"` CreatedAt int64 `json:"createdAt"` } // Заказ type Order struct { ID int `json:"id"` UserID int `json:"userId"` ProductID int `json:"productId"` Quantity int `json:"quantity"` TotalPrice float64 `json:"totalPrice"` Status string `json:"status"` CreatedAt int64 `json:"createdAt"` UpdatedAt int64 `json:"updatedAt"` } ``` ## Конфигурация Каждый пример создает свою тестовую папку и настраивает базу данных с соответствующими коллекциями и индексами. После выполнения примеры автоматически очищают тестовые данные. ## Примечания - Все примеры написаны на русском языке для лучшего понимания - Примеры демонстрируют реальные сценарии использования - Код включает обработку ошибок и логирование - Производительность измеряется и выводится в консоль