Files

61 lines
1.9 KiB
Markdown

# Выбор базы данных
---
## Decision Tree
```mermaid
graph TD
A[Какую БД?] --> B{Многопользовательская?}
B -->|Нет / прототип| C[SQLite]
B -->|Да| D{Нужен JSONB?}
D -->|Да| E[PostgreSQL]
D -->|Нет| F{Нужен full-text search?}
F -->|Да| E
F -->|Нет| G[SQLite / PostgreSQL]
```
---
## Варианты
### SQLite
| | |
|---|---|
| **Когда** | Прототип, dev, однопользовательское |
| **Плюсы** | Не требует установки, встроенная, ноль конфигурации |
| **Минусы** | Нет конкурентной записи, нет JSONB, нет ARRAY, нет полнотекстового поиска |
| **Драйвер** | aiosqlite |
### PostgreSQL
| | |
|---|---|
| **Когда** | Production, многопользовательское, аналитика |
| **Плюсы** | ACID, JSONB, ARRAY, full-text search, масштабирование |
| **Минусы** | Требует установки, настройки, памяти |
| **Драйвер** | asyncpg |
---
## Рекомендация
**SQLite для разработки, PostgreSQL для production.**
Обе БД поддерживаются через SQLAlchemy с минимальными отличиями в моделях.
### Что нужно для портабельности
```python
# Вместо PostgreSQL-specific типов используем универсальные:
UUID String(36)
JSONB JSON
ARRAY JSON
```
---
## [ASK]
- Какая БД нужна на старте? (рекомендация: SQLite)
- Когда переходить на PostgreSQL? (перед production)
- Нужна ли поддержка обеих БД одновременно? (желательно — unit-тесты на SQLite быстрее)