Initial commit: VoIdeaAI - voice-first AI idea assistant
This commit is contained in:
@@ -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 записей)
|
||||
Reference in New Issue
Block a user