-
Notifications
You must be signed in to change notification settings - Fork 0
Justification DB
Vu que l'information que l'on compte utiliser aura un format bien précis, il nous est plus intéressant d'utiliser une base de données relationnelle pour pouvoir être plus stricts avec les données à stocker et pouvoir mettre des validations côté DB. D'autres fonctionnalités des DB SQL que l'on utilisera sont les foreign keys, JOIN et transactions pour mettre en lien les différents types de données et rendre atomique une série d'actions, avec la possibilité de rollback.
On a donc dû choisir entre MySQL et Postgres, étant les deux db relationnelles les plus utilisées, on a fini par choisir Postgres pour les raisons suivantes :
-
Data types avancés : Postgres prend en charge les types de MySQL et ajoute des types plus avancés tels que du JSON, des Array d'autres types. Alors que pour avoir une relation 1-N il faudrait normalement faire une table supplémentaire.
-
Réplication : Postgres permet d'avoir 2 ou plus DB répliquées, pour avoir du load-balancing et de la redondance.
-
Performance en concurrence : Postgres est optimisé pour effectuer des requêtes en parallèle, notamment en lecture grâce aux index. Vu que sur une app web, on aura des connexions simultanées pour chaque utilisateur, cette optimisation est très nécessaire.
-
Intégration dans python (async) : Python a une libraire codée en Cython qui implémente les interactions avec l'API postgres de façon asynchrone asyncpg. FastAPI, notre backend, est optimisé pour travailler en asynchrone, pour pouvoir gérer les requêtes simultanément. MySQL n'a pas cette intégration et donc à chaque interaction avec la DB, FastAPI devra "attendre" que l'opération soit exécutée avant de passer à autre chose.
-
Légèreté & performances: une base de donnée légère est plus adaptée à notre client et à l'hébergement partagé. Postgres est moins gourmand que ses concurrents, à la fois pour la RAM et également pour le CPU. Malgré une basse consommation de RAM, il reste très puissant comparé à MySQL. source
- R0 + R11. Liens utiles
- R1. Description projet
- R1 + R17. Description client et intéractions
- R2. User Stories
- R3. Justification Backend
- R4. Justification Frontend
- R5. Architecture, fonctionnement et déploiement
- R6. Diagramme UML
- R7. Justification DB
- R8. Diagramme DB
- R9. Documentation API
- R10. Comment installer
- R12. Utilisation GitHub
- R13. Testing
- R14. Sécurité
- R15. Aspects intéressants
- R16. Références utilisées
- R18. Travail en équipe
- R19. Cadre légal
- R20. Conclusions personnelles