Beanie : Un ODM pour MongoDB - Avantages et Inconvénients

Thibault Djaballah

Beanie se positionne en tant qu'Object Document Mapper (ODM), également connu sous le nom d'ORM (Object Relational Mapper) pour les bases de données relationnelles. Découvrons ses avantages et inconvenients

Beanie se positionne en tant qu'Object Document Mapper (ODM), également connu sous le nom d'ORM (Object Relational Mapper) pour les bases de données relationnelles. Conçu spécifiquement pour MongoDB, Beanie tire parti des concepts du Modern Python, notamment les annotations de type.

Lors d'un meetup Flint animé par Thibault Djaballah, nous avons eu l'opportunité de découvrir cet ODM. Avant de plonger dans son live coding, où il met en avant les différentes fonctionnalités de Beanie (documents, relations entre documents, gestion de l'état, agrégations, migrations, etc.), explorons ses avantages et inconvénients.

Les avantages de Beanie

L'utilisation d'un ODM ou ORM, comme Beanie, offre une première ligne de défense contre les risques d'injection. En évitant d'écrire manuellement des requêtes (MongoDB ou SQL), le risque d'exposition à des injections est considérablement réduit.

Quant au côté Modern Python, les annotations de type jouent un double rôle en servant de documentation et d'aide pour les développeurs dans leur IDE, tout en validant les objets destinés à être sauvegardés dans MongoDB.

Un autre point fort de Beanie réside dans sa documentation complète disponible sur https://beanie-odm.dev/. Cela élimine le besoin de documenter chaque aspect du projet et facilite  l'intégration des nouveaux développeurs qui peuvent rapidement se familiariser avec Beanie.

Un troisième argument clé en faveur de Beanie est sa palette de fonctionnalités, pratiques au fil du développement d'un projet :

  • Maintien de l'état entre l'objet dans l'application et le document dans la base de données pour optimiser les requêtes d'écriture, lors de problèmes de performances ;
  • Possibilité de mettre en cache les résultats des requêtes les plus fréquentes dans l'application ;
  • Gestion des problèmes de concurrence entre écritures grâce à l'utilisation d'ID de révision, permettant de détecter les mises à jour incorrectes par le biais d'un hash du document stocké dans la base de données
  • Framework de migration pour l'évolution du schéma des documents MongoDB.

Il est également important de noter que Beanie est basé sur Pydantic, ce qui s'avère particulièrement avantageux lors de l'utilisation de FastAPI. Les schémas Beanie, en tant que modèles Pydantic, peuvent également être utilisés comme schémas de validation pour FastAPI.

Fonctionnement de Beanie (source : jairoandres.com)

Les inconvénients de Beanie

L'intégration de Beanie peut entraîner un léger surcoût en raison de la couche d'abstraction supplémentaire, bien que souvent négligeable par rapport au délai d’I/O avec la base de données.

Il est important de noter que Beanie est une bibliothèque relativement jeune, peu connue, et principalement maintenue par son fondateur (https://github.com/roman-right/beanie). Des modifications substantielles entre les versions et des bugs peuvent être plus fréquents que dans d'autres bibliothèques Python bien établies.

Enfin, le framework de migration de Beanie présente un comportement assez différent de son homologue, Alembic, utilisé pour les bases de données SQL, ce qui peut sembler déroutant au premier abord.

Conclusion

Malgré ces quelques points négatifs, les avantages offerts par Beanie surpassent largement ces inconvénients, notamment lorsqu'il s'agit de travailler sur le développement d'un serveur FastAPI. La facilité d'intégration, la sécurité renforcée, et les fonctionnalités avancées fournies par Beanie en font un choix judicieux.

Thibault Djaballah

Thibault est ingénieur de formation, spécialisé dans le backend Python pour le Big Data et le Machine Learning, avec une expérience variée dans l'industrie et la tech. Sa philosophie professionnelle privilégie des solutions simples et efficaces, en mettant en œuvre des technologies open source.