klg-asutk-app/docs/DATABASE_ARCHITECTURE.md
Yuriy 0150aba4f5 Consolidation: KLG ASUTK + PAPA integration
- Unify API: lib/api.ts uses /api/v1, inbox uses /api/inbox (rewrites)
- Remove localhost refs: openapi, inbox page
- Add rewrites: /api/inbox|tmc -> inbox-server, /api/v1 -> FastAPI
- Add stub routes: knowledge/insights, recommendations, search, log-error
- Transfer from PAPA: prompts (inspection, tmc), scripts, supabase, data/tmc-requests
- Fix inbox-server: ORDER BY created_at, package.json
- Remove redundant app/api/inbox/files route (rewrites handle it)
- knowledge/ in gitignore (large PDFs)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 17:18:31 +03:00

9.7 KiB
Raw Permalink Blame History

Архитектура баз данных нового поколения

Обзор

Система использует современные базы данных нового поколения для оптимальной производительности и масштабируемости.

Архитектура

┌─────────────────────────────────────────────────────────┐
│                    Application Layer                      │
│              (Next.js API Routes)                         │
└──────────────────────┬────────────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────────┐
│                  Database Router                          │
│         (Маршрутизация запросов к БД)                     │
└──────────────────────┬────────────────────────────────────┘
                       │
        ┌──────────────┼──────────────┐
        │              │              │
        ▼              ▼              ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│    OLTP      │ │    OLAP      │ │   NewSQL     │
│              │ │              │ │              │
│ PostgreSQL   │ │ ClickHouse   │ │ TiDB         │
│ CockroachDB  │ │ DuckDB       │ │ YugabyteDB   │
└──────────────┘ └──────────────┘ └──────────────┘

OLTP (Online Transaction Processing)

PostgreSQL (основная БД)

Использование:

  • Основные CRUD операции
  • Транзакции
  • Реляционные данные
  • Векторный поиск (pgvector)

Расширения:

  • pgvector - векторный поиск для AI
  • pg_stat_statements - мониторинг производительности
  • pglogical - логическая репликация
  • pg_trgm - полнотекстовый поиск

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

shared_preload_libraries: pg_stat_statements,pgvector
max_connections: 200
shared_buffers: 256MB
effective_cache_size: 1GB

CockroachDB (распределённая БД)

Использование:

  • Глобально распределённые данные
  • Высокая доступность
  • Горизонтальное масштабирование
  • Multi-region deployments

Особенности:

  • ACID транзакции
  • SQL совместимость
  • Автоматическое шардирование
  • Географическое распределение

OLAP (Online Analytical Processing)

ClickHouse

Использование:

  • Аналитические запросы
  • Большие объёмы данных
  • Агрегации и группировки
  • Временные ряды

Особенности:

  • Колоночное хранение
  • Высокая скорость чтения
  • Сжатие данных
  • Распределённые запросы

Примеры запросов:

-- Аналитика по воздушным судам
SELECT 
  operator,
  COUNT(*) as total,
  AVG(flight_hours) as avg_hours,
  SUM(flight_hours) as total_hours
FROM aircraft_analytics
WHERE created_at >= now() - INTERVAL 1 YEAR
GROUP BY operator
ORDER BY total DESC;

DuckDB

Использование:

  • Быстрая аналитика
  • Встраиваемая аналитика
  • Локальная обработка данных
  • Интеграция с Pandas/Polars

Особенности:

  • Работает как библиотека
  • Не требует отдельного сервера
  • Быстрые запросы на небольших данных
  • Поддержка Parquet, CSV, JSON

Примеры использования:

import { duckdbQuery } from '@/lib/database/duckdb-client';

// Быстрая аналитика
const results = await duckdbQuery(`
  SELECT 
    operator,
    COUNT(*) as count,
    AVG(flight_hours) as avg_hours
  FROM aircraft
  GROUP BY operator
`);

NewSQL

TiDB

Использование:

  • Горизонтальное масштабирование
  • MySQL совместимость
  • HTAP (Hybrid Transactional/Analytical Processing)
  • Автоматическое шардирование

Особенности:

  • Распределённые транзакции
  • Автоматическая балансировка
  • Горизонтальное масштабирование
  • MySQL протокол

YugabyteDB

Использование:

  • Распределённые данные
  • PostgreSQL совместимость
  • Высокая доступность
  • Multi-cloud deployments

Особенности:

  • PostgreSQL API
  • Распределённые транзакции
  • Автоматическое реплицирование
  • Географическое распределение

Маршрутизация запросов

Database Router

Система автоматически маршрутизирует запросы к правильной БД:

import { dbRead, dbWrite, dbAnalytics } from '@/lib/database/db-router';

// OLTP запрос (PostgreSQL)
const aircraft = await dbRead(
  'SELECT * FROM aircraft WHERE status = $1',
  ['Активен']
);

// Запись (CockroachDB для распределённых данных)
await dbWrite(
  'INSERT INTO aircraft (registration_number) VALUES ($1)',
  ['RA-12345']
);

// Аналитика (ClickHouse)
const stats = await dbAnalytics(`
  SELECT 
    operator,
    COUNT(*) as total
  FROM aircraft_analytics
  GROUP BY operator
`);

Стратегии использования

Чтение данных

  1. Основные данные → PostgreSQL
  2. Распределённые данные → CockroachDB
  3. Аналитика → ClickHouse или DuckDB

Запись данных

  1. Транзакции → PostgreSQL или CockroachDB
  2. Аналитические данные → ClickHouse (через пайплайны)

Аналитика

  1. Большие объёмы → ClickHouse
  2. Быстрая аналитика → DuckDB
  3. HTAP → TiDB

Репликация и шардирование

PostgreSQL

  • Логическая репликация через pglogical
  • Read replicas для масштабирования чтения
  • Шардирование через расширения (Citus)

CockroachDB

  • Автоматическое реплицирование
  • Географическое распределение
  • Автоматическое шардирование

ClickHouse

  • Репликация через ReplicatedMergeTree
  • Шардирование через Distributed таблицы

Мониторинг

Метрики производительности

  • pg_stat_statements для PostgreSQL
  • Встроенные метрики для ClickHouse
  • Prometheus метрики для всех БД

Логирование

Все запросы логируются через централизованную систему логирования.

Миграции

PostgreSQL

npm run db:migrate

CockroachDB

npm run db:migrate:cockroach

ClickHouse

npm run db:migrate:clickhouse

Переменные окружения

# PostgreSQL
DATABASE_URL=postgresql://klg:klg@localhost:5432/klg

# CockroachDB
COCKROACHDB_URL=postgresql://root@localhost:26257/klg?sslmode=disable

# ClickHouse
CLICKHOUSE_HOST=localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_USER=klg
CLICKHOUSE_PASSWORD=klg

# TiDB
TIDB_HOST=localhost
TIDB_PORT=4000
TIDB_USER=root
TIDB_PASSWORD=

# YugabyteDB
YUGABYTEDB_URL=postgresql://yugabyte@localhost:5433/yugabyte

# Выбор БД
USE_DISTRIBUTED_DB=false
USE_DUCKDB=false

Производительность

Оптимизация запросов

  1. Используйте правильную БД для типа запроса
  2. Индексы для частых запросов
  3. Партиционирование для больших таблиц
  4. Кэширование через Redis

Масштабирование

  1. Вертикальное: Увеличение ресурсов сервера
  2. Горизонтальное: Шардирование и репликация
  3. Географическое: Распределение по регионам

Безопасность

  • Шифрование соединений (TLS)
  • Аутентификация и авторизация
  • Резервное копирование
  • Аудит логов

Резервное копирование

  • PostgreSQL: pg_dump / pg_basebackup
  • CockroachDB: Встроенное резервное копирование
  • ClickHouse: clickhouse-backup