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

3.4 KiB
Raw Blame History

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 для схемы
  • Начальная настройка (создание пользователя, базы)

Миграция

Для локальной разработки:

# 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