2.7 KiB
2.7 KiB
Шаблон 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— миграция