- 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>
9.7 KiB
9.7 KiB
Архитектура баз данных нового поколения
Обзор
Система использует современные базы данных нового поколения для оптимальной производительности и масштабируемости.
Архитектура
┌─────────────────────────────────────────────────────────┐
│ 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- векторный поиск для AIpg_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
`);
Стратегии использования
Чтение данных
- Основные данные → PostgreSQL
- Распределённые данные → CockroachDB
- Аналитика → ClickHouse или DuckDB
Запись данных
- Транзакции → PostgreSQL или CockroachDB
- Аналитические данные → ClickHouse (через пайплайны)
Аналитика
- Большие объёмы → ClickHouse
- Быстрая аналитика → DuckDB
- 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
Производительность
Оптимизация запросов
- Используйте правильную БД для типа запроса
- Индексы для частых запросов
- Партиционирование для больших таблиц
- Кэширование через Redis
Масштабирование
- Вертикальное: Увеличение ресурсов сервера
- Горизонтальное: Шардирование и репликация
- Географическое: Распределение по регионам
Безопасность
- Шифрование соединений (TLS)
- Аутентификация и авторизация
- Резервное копирование
- Аудит логов
Резервное копирование
- PostgreSQL:
pg_dump/pg_basebackup - CockroachDB: Встроенное резервное копирование
- ClickHouse:
clickhouse-backup