Примеры использования 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
- Кастомные функции сериализации с дополнительной логикой
Запуск примеров
Базовый пример
cd examples/basic
go run main.go
Примеры удаления
cd examples/delete
go run main.go
Примеры вставки
cd examples/insert
go run main.go
Интеграционные тесты
cd examples/integration
go run main.go
Настраиваемые функции JSON
cd examples/custom-json
go run main.go
Особенности примеров
Партиционирование
Примеры демонстрируют работу с партиционированными коллекциями, где данные автоматически распределяются по файлам на основе значения определенного поля.
Кэширование
Показана работа с кэшем для улучшения производительности чтения данных.
Уникальные поля (UniqueFields)
Коллекции могут иметь поля с ограничением уникальности. При вставке и обновлении LineDB проверяет, что значение поля не дублируется:
UniqueFields: []string{"email"},
Пустые значения (nil, "") не проверяются. При SkipCheckExistingForWrite: true проверка уникальности пропускается.
Фильтрация
Демонстрируются различные способы фильтрации:
- Объектные фильтры
- Строковые фильтры
- Частичное совпадение
- Строгое сравнение
Производительность
Примеры включают тесты производительности для массовых операций.
HTTP API
Интеграционный пример включает простой HTTP сервер с REST API для работы с базой данных.
Настраиваемые функции сериализации JSON
Библиотека поддерживает настраиваемые функции сериализации и десериализации JSON:
// Функции сериализации по умолчанию (используют 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, но вы можете указать любые функции сериализации, соответствующие сигнатурам:
func(any) ([]byte, error)для Marshalfunc([]byte, any) errorдля Unmarshal
Структуры данных
Примеры используют следующие основные структуры данных:
// Пользователь
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"`
}
Конфигурация
Каждый пример создает свою тестовую папку и настраивает базу данных с соответствующими коллекциями и индексами. После выполнения примеры автоматически очищают тестовые данные.
Примечания
- Все примеры написаны на русском языке для лучшего понимания
- Примеры демонстрируют реальные сценарии использования
- Код включает обработку ошибок и логирование
- Производительность измеряется и выводится в консоль