init elowdb go-port commit
This commit is contained in:
203
examples/README.md
Normal file
203
examples/README.md
Normal file
@@ -0,0 +1,203 @@
|
||||
# Примеры использования 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"`
|
||||
}
|
||||
```
|
||||
|
||||
## Конфигурация
|
||||
|
||||
Каждый пример создает свою тестовую папку и настраивает базу данных с соответствующими коллекциями и индексами. После выполнения примеры автоматически очищают тестовые данные.
|
||||
|
||||
## Примечания
|
||||
|
||||
- Все примеры написаны на русском языке для лучшего понимания
|
||||
- Примеры демонстрируют реальные сценарии использования
|
||||
- Код включает обработку ошибок и логирование
|
||||
- Производительность измеряется и выводится в консоль
|
||||
Reference in New Issue
Block a user