Files
elowdb-go/examples/README.md

204 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Примеры использования 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"`
}
```
## Конфигурация
Каждый пример создает свою тестовую папку и настраивает базу данных с соответствующими коллекциями и индексами. После выполнения примеры автоматически очищают тестовые данные.
## Примечания
- Все примеры написаны на русском языке для лучшего понимания
- Примеры демонстрируют реальные сценарии использования
- Код включает обработку ошибок и логирование
- Производительность измеряется и выводится в консоль