Files
elowdb-go/examples
2026-04-09 14:08:27 +06:00
..
2026-04-07 15:04:38 +06:00
2026-04-09 14:08:27 +06:00
2026-04-07 15:04:38 +06:00
2026-04-09 14:08:27 +06:00
2026-04-09 14:08:27 +06:00
2026-04-07 15:04:38 +06:00
2026-04-07 15:04:38 +06:00
2026-04-07 15:04:38 +06:00
2026-04-09 14:08:27 +06:00
2026-04-09 14:08:27 +06:00
2026-04-07 15:04:38 +06:00
2026-03-03 14:44:47 +06:00

Примеры использования 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) для Marshal
  • func([]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"`
}

Конфигурация

Каждый пример создает свою тестовую папку и настраивает базу данных с соответствующими коллекциями и индексами. После выполнения примеры автоматически очищают тестовые данные.

Примечания

  • Все примеры написаны на русском языке для лучшего понимания
  • Примеры демонстрируют реальные сценарии использования
  • Код включает обработку ошибок и логирование
  • Производительность измеряется и выводится в консоль