- 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>
316 lines
9.7 KiB
Markdown
316 lines
9.7 KiB
Markdown
# Архитектура баз данных нового поколения
|
||
|
||
## Обзор
|
||
|
||
Система использует современные базы данных нового поколения для оптимальной производительности и масштабируемости.
|
||
|
||
## Архитектура
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ 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` - полнотекстовый поиск
|
||
|
||
**Конфигурация:**
|
||
```yaml
|
||
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
|
||
|
||
**Использование:**
|
||
- Аналитические запросы
|
||
- Большие объёмы данных
|
||
- Агрегации и группировки
|
||
- Временные ряды
|
||
|
||
**Особенности:**
|
||
- Колоночное хранение
|
||
- Высокая скорость чтения
|
||
- Сжатие данных
|
||
- Распределённые запросы
|
||
|
||
**Примеры запросов:**
|
||
```sql
|
||
-- Аналитика по воздушным судам
|
||
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
|
||
|
||
**Примеры использования:**
|
||
```typescript
|
||
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
|
||
|
||
Система автоматически маршрутизирует запросы к правильной БД:
|
||
|
||
```typescript
|
||
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
|
||
|
||
```bash
|
||
npm run db:migrate
|
||
```
|
||
|
||
### CockroachDB
|
||
|
||
```bash
|
||
npm run db:migrate:cockroach
|
||
```
|
||
|
||
### ClickHouse
|
||
|
||
```bash
|
||
npm run db:migrate:clickhouse
|
||
```
|
||
|
||
## Переменные окружения
|
||
|
||
```env
|
||
# 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`
|