Initial commit: VoIdeaAI - voice-first AI idea assistant

This commit is contained in:
2026-05-13 12:51:42 +03:00
commit 688d043dad
421 changed files with 47915 additions and 0 deletions
+77
View File
@@ -0,0 +1,77 @@
# Производительность
## Performance Budgets
| Метрика | Лимит (p95) | Примечание |
|---------|-------------|------------|
| API response (без AI) | < 500ms | |
| API response (с AI) | < 5s | Fallback после 5s |
| DB query (одиночный) | < 100ms | С индексом |
| DB query (агрегатный) | < 300ms | |
| WebUI page load | < 2s | |
| AI call | < 5s | Иначе fallback |
---
## Индексы БД
**Что индексировать:**
- Поля в WHERE и JOIN: `user_id`, `status`, `email`
- Поля сортировки: `created_at`
- Внешние ключи: `user_id`, `parent_id`
**Формат имени индекса:** `ix_tablename_column`
```sql
CREATE INDEX ix_ideas_user_id ON ideas(user_id);
CREATE INDEX ix_ideas_status ON ideas(status);
```
---
## Connection Pool
```python
engine = create_async_engine(
settings.database_url,
pool_size=10, # Постоянные соединения
max_overflow=20, # Дополнительные при пике
pool_pre_ping=True, # Проверка перед использованием
)
```
Для SQLite pool настраивать не нужно — он файловый.
---
## Метрики (если реализованы)
Собираемые метрики:
| Метрика | Тип | Описание |
|---------|-----|----------|
| `http_requests_total` | Counter | Всего запросов |
| `http_request_duration_ms` | Histogram | Время ответа (p50/p95/p99) |
| `http_requests_by_endpoint` | Counter | По endpoint'ам |
| `http_errors_total` | Counter | 4xx и 5xx |
| `db_query_duration_ms` | Histogram | Время запросов к БД |
| `ai_provider_calls` | Counter | Вызовы AI провайдеров |
| `agent_execution_duration` | Histogram | Время выполнения агентов |
**Где хранить:** в БД (таблица `agent_metrics`), в перспективе — Prometheus.
---
## Когда оптимизировать
1. **Профилировать до оптимизации.** Не гадать — измерять.
2. **Оптимизировать только горячие пути.** 90% времени уходит на 10% кода.
3. **Кэшировать только то, что реально часто читается.** Преждевременное кэширование — корень всех зол.
---
## [ASK] Вопросы по производительности
- Нужен ли Redis кэш? (да, если часто читаются одни и те же данные)
- Нужен ли CDN для статики? (да, для production)
- Нужен ли database sharding? (нет, до 10M записей)