113 lines
3.4 KiB
Markdown
113 lines
3.4 KiB
Markdown
# 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* |