Files
voidea/docs/adr/001-postgresql-choice.md
T

113 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ADR-001: Выбор PostgreSQL как основной СУБД
**Статус:** принято
**Дата:** 2026-05-10
---
## Контекст
Для проекта VoIdea требуется база данных с поддержкой:
- Сложных запросов (аналитика идей)
- JSONB для гибкости (метаданные, настройки)
- ACID транзакции (финансовые операции, подписки)
- Масштабируемость (тысячи пользователей)
- Хорошая работа с Python (asyncpg)
Рассматривались:
- **PostgreSQL** — реляционная, ACID, JSONB, mature
- **MongoDB** — документоориентированная, гибкость, шардинг
- **SQLite** — простая, не подходит для production
---
## Решение
**PostgreSQL** выбран как основная СУБД.
### Обоснование
| Критерий | PostgreSQL | MongoDB | SQLite |
|----------|------------|---------|--------|
| ACID | ✅ Полный | ❌ Eventual | ✅ Полный |
| JSONB | ✅ Отличный | ✅ Лучший | ❌ Limited |
| Масштабируемость | ✅ Хорошая | ✅ Отличная | ❌ Плохая |
| Python async | ✅ asyncpg | ✅ motor | ❌ |
| Сложные запросы | ✅ Отличные | ❌ Limited | ⚠️ Basic |
| Зрелость | ✅ 20+ лет | ⚠️ 15 лет | ✅ |
### Преимущества для VoIdea
1. **JSONB** — хранение зашифрованных данных, настроек агентов
2. **ACID** — безопасность транзакций (подписки, платежи)
3. **Индексы** — поиск по метаданным, пользователям
4. **PostGIS** — геолокация (future: автоопределение региона)
5. **Full-text search** — поиск в идеях
---
## Последствия
### Положительные
- Надёжная, проверенная база данных
- Отличная производительность
- Большое сообщество
- Хорошая документация
- Mature ORM (SQLAlchemy async)
### Отрицательные
- Требует установку и настройку (PostgreSQL server)
- Миграции Alembic для схемы
- Начальная настройка (создание пользователя, базы)
### Миграция
Для локальной разработки:
```bash
# Windows
# Скачать PostgreSQL с postgresql.org/download/windows
# или использовать Chocolatey:
choco install postgresql
# Ubuntu (VPS)
apt install postgresql postgresql-contrib
```
---
## Реализация
### Конфигурация в .env
```bash
DB_HOST=localhost
DB_PORT=5432
DB_NAME=voidea
DB_USER=voidea
DB_PASS=your_secure_password
```
### SQLAlchemy async setup
```python
from sqlalchemy.ext.asyncio import create_async_engine
engine = create_async_engine(
f"postgresql+asyncpg://{DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_NAME}",
echo=True
)
```
---
## Ответственный
**Decision maker:** Owner
**Review date:** При масштабировании (> 10,000 пользователей)
---
*Создано: 2026-05-10*
*Обновлено при изменениях SpecAgent*