docs: add PostgreSQL migration guide for future scalability

- Add section 9 to TECHNICAL_SPECIFICATIONS.md with:
  - Migration criteria (DB size, connections, users, transactions)
  - Proposed repository pattern architecture
  - Migration steps overview
  - Benefits of PostgreSQL

- Create docs/MIGRATION_TO_POSTGRES.md with comprehensive guide:
  - When to migrate (detailed thresholds)
  - Architecture overview (repository pattern)
  - Step-by-step migration process (10 steps)
  - Complete code examples:
    * Base repository interfaces
    * SQLite implementation
    * PostgreSQL implementation
    * Repository factory
    * Migration script
  - Docker Compose configuration
  - Rollback plan
  - Monitoring and maintenance
  - Performance optimization
  - Troubleshooting guide

This enables future migration when database grows beyond SQLite capabilities.
This commit is contained in:
ijuanes 2026-06-17 17:22:50 +01:00
parent 85978a710f
commit 1ad0e8bf13
2 changed files with 1038 additions and 0 deletions

View file

@ -147,3 +147,54 @@ def loan_device(device_id: int, user_id: int) -> Loan:
- **Logging**: Registrar préstamos/devoluciones para auditoría
- **Versionado API**: `/api/v1/...` para compatibilidad futura
- **Pruebas**: Cubrir flujos críticos (préstamo con dispositivo no disponible, devolución de préstamo inexistente)
---
## 9. Migración a PostgreSQL (Futuro)
### Contexto
El sistema actualmente utiliza **SQLite** como base de datos embebida, ideal para prototipos y aplicaciones pequeñas. Sin embargo, SQLite tiene limitaciones para escalar.
### Criterios para Migración
Considerar migrar a **PostgreSQL** cuando:
- Tamaño DB > 1GB
- Más de 50 conexiones simultáneas
- Más de 200 usuarios activos
- Más de 500 transacciones por minuto
- Necesidad de múltiples servidores
### Arquitectura Propuesta
Usar un patrón de **Repository** para abstraer la base de datos:
```
backend/
├── repositories/
│ ├── base_repository.py # Interfaz abstracta
│ ├── sqlite_repository.py # Implementación SQLite
│ └── postgres_repository.py # Implementación PostgreSQL
└── config/
└── database.py # Fábrica de repositorios
```
### Schema PostgreSQL
El schema es similar al de SQLite pero con tipos de datos más específicos y índices adicionales para rendimiento.
### Pasos para Migración
1. Instalar dependencias: `pip install psycopg2-binary sqlalchemy alembic`
2. Configurar PostgreSQL y crear base de datos
3. Ejecutar script de migración: `python scripts/migrate_to_postgres.py`
4. Cambiar configuración: `DB_TYPE=postgres`
5. Iniciar aplicación
### Beneficios
- Concurrencia ilimitada (múltiples escritores)
- Escalabilidad a miles de conexiones
- Mejor rendimiento con índices
- Seguridad integrada (autenticación, roles)
- Backups automáticos
- Replicación y clustering