Je connais les bases de données NoSQL depuis une semaine maintenant.
Je comprends vraiment les avantages des bases de données NoSQL et de leurs nombreux cas d'utilisation.
Mais souvent, les gens écrivent leurs articles comme si NoSQL pouvait remplacer les bases de données relationnelles. Et il y a un point sur lequel je ne peux pas comprendre:
Les bases de données NoSQL sont (souvent) des magasins de clé-valeur.
Bien sûr, il est possible de tout stocker dans un magasin de valeurs-clés (en codant les données au format JSON, XML, peu importe), mais le problème que je vois est que vous devez obtenir une quantité de données correspondant à un critère spécifique, dans de nombreux cas. cas d'utilisation. Dans une base de données NoSQL, vous n'avez qu'un seul critère que vous pouvez rechercher efficacement: la clé. Les bases de données relationnelles sont optimisées pour rechercher efficacement toute valeur de la ligne de données.
Ainsi, les bases de données NoSQL ne sont pas vraiment un choix pour la persistance de données qui doivent être recherchées par leur contenu. Ou ai-je mal compris quelque chose?
Un exemple:
Vous devez stocker les données utilisateur pour une boutique en ligne.
Dans une base de données relationnelle, vous stockez chaque utilisateur sous forme de ligne dans la users
table, avec un ID, le nom, son pays, etc.
Dans une base de données NoSQL, vous stockez chaque utilisateur avec son ID en tant que clé et toutes ses données (codées en JSON, etc.) en tant que valeur.
Donc, si vous avez besoin d'obtenir tous les utilisateurs d'un pays spécifique (pour une raison quelconque, les responsables marketing ont besoin de savoir quelque chose à leur sujet), il est facile de le faire dans la base de données relationnelle, mais pas très efficace dans la base de données NoSQL, car vous devez obtenir chaque utilisateur, analyser toutes les données et filtrer.
Je ne dis pas que c'est impossible , mais cela devient beaucoup plus compliqué et je suppose que ce n'est pas aussi efficace si vous voulez chercher dans les données des entrées NoSQL.
Vous pouvez créer une clé pour chaque pays qui stocke les clés de chaque utilisateur résidant dans ce pays et obtenir les utilisateurs d'un pays spécifique en obtenant toutes les clés déposées dans la clé de ce pays. Mais je pense que cette technique rend un ensemble de données complexe encore plus complexe: il est plus difficile à implémenter et moins efficace que d'interroger une base de données SQL. Donc, je pense que ce n'est pas une manière que vous utiliseriez en production. Ou est-ce?
Je ne suis pas vraiment sûr d'avoir mal compris quelque chose ou d'avoir oublié certains concepts ou les meilleures pratiques pour gérer de tels cas d'utilisation. Peut-être pourriez-vous corriger mes propos et répondre à mes questions.