55 lines
2.7 KiB
Markdown
55 lines
2.7 KiB
Markdown
# Шаблон ADR
|
||
|
||
## Заголовок
|
||
[Краткое название архитектурного решения]
|
||
|
||
## Статус
|
||
[PROPOSED | ACCEPTED | DEPRECATED | SUPERSEDED]
|
||
|
||
## Контекст
|
||
Опишите проблему, которая мотивирует это решение. Укажите значимые факты:
|
||
- Почему это решение нужно?
|
||
- Какие ограничения или требования применимы?
|
||
- Какие альтернативы рассматривались?
|
||
|
||
## Решение
|
||
Сформулируйте принятое решение чётко и кратко.
|
||
|
||
## Последствия
|
||
Опишите результаты и следствия этого решения:
|
||
- **Плюсы:** выгоды, улучшения
|
||
- **Минусы:** компромиссы, риски
|
||
- **Нейтрально:** изменения, которые не хороши и не плохи
|
||
|
||
## Ссылки
|
||
- Связанные ADR (если есть)
|
||
- Внешняя документация или стандарты
|
||
- Файлы кода, реализующие это решение
|
||
|
||
---
|
||
|
||
## Пример: ADR-001 Использование UUID как первичного ключа
|
||
|
||
### Статус
|
||
ACCEPTED
|
||
|
||
### Контекст
|
||
VidConf требует глобально уникальных идентификаторов для распределённых операций и будущего шардирования.
|
||
- Генерация UUID в PostgreSQL быстрая (через `gen_random_uuid()`)
|
||
- Не требует центральной нумерации
|
||
- Поддерживает репликацию без координации
|
||
|
||
### Решение
|
||
Все таблицы используют `UUID` (версия 4) как первичный ключ, генерируемый на сервере через `gen_random_uuid()`.
|
||
Исключения: `phrases` и `chat_messages` используют `BIGINT IDENTITY` для высокочастотных вставок.
|
||
|
||
### Последствия
|
||
- **Плюс:** уникальность на всех инстансах; не требует глобальной координации
|
||
- **Плюс:** поддерживает будущие распределённые архитектуры
|
||
- **Минус:** больший размер индекса (16 байт против 8 у BIGINT)
|
||
- **Нейтрально:** требует явной поддержки типа UUID в ORM
|
||
|
||
### Ссылки
|
||
- `backend/models/*.py` — все модели используют `Mapped[uuid.UUID]`
|
||
- `backend/alembic/versions/1e2e34a0cb06_initial_schema.py` — миграция
|