J’ai déjà discuté des raisons pourquoi je ne favorisais pas l’utilisation d’une base de données NoSQL dans un projet auquel je collaborais. Mais, est-ce que ces bases de données ont leur place? Est-ce qu’elles sont utiles? Comment faire le meilleur choix?
Les réponses, comme pour la plupart des choses en informatique, dépendent principalement de l’utilisation. En effet, il faut être conscient des limites imposées par les choix technologiques que l’on fait et il faut comprendre comment ces limites peuvent contraindre l’application développée.
En voici un exemple. Certaines bases de données NoSQL ne garantissent pas l’intégrité des données à un point précis dans le temps. L’intégrité sera éventuellement atteinte dans le futur quand les différentes instances de la base de données auront terminées de se synchroniser. Il est donc très possible qu’une modification prenne quelque temps pour être visible pour tous les utilisateurs. Ce n’est pas très grave pour certaines applications comme un système d’indexation. L’index peut attendre quelques instants avant d’être propagé aux autres utilisateurs. Cependant, ce n’est pas la même histoire pour un système bancaire. Il ne serait pas très agréable d’expliquer à quelqu’un que le solde de son compte est peut-être le bon et que de toute façon, s’il ne l’est pas, qu’il le sera dans quelques minutes.
La majeure différence entre les deux cas est le domaine à lequel on applique la technologie. Dans le cas de l’indexation, les données peuvent être dans un état transitoire sans qu’il n’y ait d’impact important. Dans le pire des cas, on va atteindre le mauvais enregistrement et rire un peu du système de recherche en le traitant d’incompétent. Dans le cas du système bancaire, il est nécessaire de garantir que les données soient bonnes à tout moment. Les conséquences peuvent être catastrophiques.
En résumé, le choix reste clair pour une application de gestion d’entreprise. On ne peut pas vraiment se permettre des données invalides ou transitoires. En plus, les besoins dans ce domaine d’application sont normalement bien couverts par les bases de données relationnelles. Pour les domaines d’utilisation plus exotiques tel l’analyse de graphe ou le stockage de données non-structurées, la décision est moins aisée. Il est possible d’utiliser une base de données relationnelle mais c’est un chemin tortueux tandis que certaines bases de données NoSQL sont excellentes pour pour ce type d’utilisation. Si on poursuit dans cette voie, il faut évaluer les capacités techniques, la complexité et l’objectif de la base de données sélectionnée versus notre expérience dans d’autres techniques. Il est plus simple d’utiliser une technologie qui n’est pas la meilleure mais que l’on connait bien qu’une qu’on ne connait pas du tout.
Une autre option très intéressante est de combiner les deux types de bases de données dans la même application. On bénéficie ainsi des avantages des deux parties. Il faut alors considérer les fonctionnalités de l’application et décider quel système doit s’en charger.
Pour en savoir encore plus et aller en terres inconnues : http://nosql-database.org/.