61 lines
1.9 KiB
Markdown
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 быстрее)
|