3.4 KiB
3.4 KiB
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
- JSONB — хранение зашифрованных данных, настроек агентов
- ACID — безопасность транзакций (подписки, платежи)
- Индексы — поиск по метаданным, пользователям
- PostGIS — геолокация (future: автоопределение региона)
- Full-text search — поиск в идеях
Последствия
Положительные
- Надёжная, проверенная база данных
- Отличная производительность
- Большое сообщество
- Хорошая документация
- Mature ORM (SQLAlchemy async)
Отрицательные
- Требует установку и настройку (PostgreSQL server)
- Миграции Alembic для схемы
- Начальная настройка (создание пользователя, базы)
Миграция
Для локальной разработки:
# Windows
# Скачать PostgreSQL с postgresql.org/download/windows
# или использовать Chocolatey:
choco install postgresql
# Ubuntu (VPS)
apt install postgresql postgresql-contrib
Реализация
Конфигурация в .env
DB_HOST=localhost
DB_PORT=5432
DB_NAME=voidea
DB_USER=voidea
DB_PASS=your_secure_password
SQLAlchemy async setup
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