Vous ne pouvez jamais parler de la base de données dite "NoSQL" sans apporter le théorème CAP (cohérence, disponibilité, partition: choisissez deux). Si vous devez choisir, par exemple, entre MongoDB (partition, cohérence) et CouchDB (disponibilité, partition), le premier auquel vous devez penser est "Ai-je besoin de données correctes ou ai-je besoin d'avoir accès tout le temps?".
Ces nouvelles bases de données ont été conçues pour être partitionnées. Mais si je ne le fais pas ? Et si je pense que c'est plutôt cool d'avoir une clé / valeur, une colonne, un document, quelle que soit la base de données au lieu d'une relationnelle, et de créer une seule instance de serveur et de ne jamais la partager? Dans ce cas, ne serais-je pas à la fois disponible et cohérent? MongoDB n'aurait pas besoin de répliquer quoi que ce soit, il serait donc disponible. Et CouchDB n'aurait qu'une seule source de données, donc ce serait assez cohérent.
Cela signifierait donc que, dans ce cas, MongoDB et CouchDB auraient peu de différence en termes de cas d'utilisation? Eh bien, sauf bien sûr les performances, l'API et autres, mais ce serait plus comme choisir entre PostgreSQL et MySQL que d'avoir deux ensembles d'exigences fondamentalement différents.
Suis-je ici? Puis-je changer une base de données AP ou CP en AC en ne créant pas plus d'une instance? Ou y a-t-il quelque chose qui me manque?
Posons la question à l'envers. Et si je prends une base de données relationnelle, disons MySQL, et la mets dans une configuration maître / esclaves. Je n'utilise pas de transactions ACID Si j'ai besoin qu'une écriture soit synchronisée immédiatement avec l'esclave, cela n'en ferait-il pas une base de données CP? Et si je le synchronise à des intervalles prédéfinis, et peu importe si un client lit les données périmées d'un esclave. Cela n'en ferait-il pas une base de données AP? Cela ne signifierait-il pas que si je renonce à la conformité ACID, je peux toujours utiliser le modèle relationnel pour une base de données partitionnée?
Essentiellement: l'évolutivité de ce que vous êtes prêt à abandonner dans le théorème de CAP, est-elle plus que le modèle de données sous-jacent? Le fait d'avoir Column, Document, Key Value, quoi que ce soit donne un coup de pouce à l'évolutivité sur un modèle relationnel? Pourrions-nous concevoir une base de données relationnelle conçue à partir de zéro pour la tolérance de partition? (Peut-être que cela existe déjà). Pourrions-nous rendre la base de données NoSQL conforme à ACID?
Désolé, c'est beaucoup de questions, mais j'ai lu beaucoup de choses sur la base de données NoSQL récemment et il me semble que le plus grand avantage de les utiliser est qu'elles correspondent mieux à la "forme" de vos données, plutôt qu'à la partition, CAP et renoncer à la conformité ACID. Après tout, tout le monde n'a pas tellement de données qu'il faut les partitionner. Existe-t-il un avantage en termes de performances / d'évolutivité à ne pas utiliser le modèle relationnel avant même de penser à partitionner mes données?