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