D'où vient mongodb stand dans le théorème CAP?
Partout où je regarde, je vois que MongoDB est le CP.
Mais quand je creuse dans je le vois, c'est finalement cohérent.
Est-ce CP lorsque vous utilisez safe=vrai? Si oui, est-ce à dire que quand j'écris avec safe=true, toutes les répliques seront mis à jour avant d'obtenir le résultat?
Vous devez vous connecter pour publier un commentaire.
MongoDB est fortement cohérente par défaut - si vous faites une écriture, puis faire une lecture, en supposant que l'écriture a réussi, vous serez toujours en mesure de lire la suite de l'écriture que vous venez de lire. C'est parce que MongoDB est un système de base et toutes les lectures aller à la primaire par défaut. Si vous pouvez éventuellement permettre la lecture de l'secondaires puis MongoDB devient finalement cohérente, où il est possible de lire out-of-date, les résultats.
MongoDB obtient également de haute disponibilité grâce au basculement automatique dans les jeux de réplicas: http://www.mongodb.org/display/DOCS/Replica+Jeux
Cela devrait aider à répondre à la question, le long de avec d'autres NoSQL et d'autres persistante des systèmes de stockage.
Je suis d'accord avec Luccas post. Vous ne pouvez pas dire que MongoDB est CP/AP/CA, parce que c'est en réalité un compromis entre C, A et P, en fonction à la fois de la base de données/configuration du pilote et du type de catastrophe: voici un récapitulatif visuel, et ci-dessous une explication plus détaillée.
Cohérence:
MongoDB est fortement cohérent lorsque vous utilisez une connexion unique ou le bon Écrire/Lire Le Niveau Préoccupant (Ce qui vous coûtera la vitesse d'exécution). Dès que vous ne remplissez pas ces conditions (en particulier lors de la lecture d'un secondaire-réplique) MongoDB devient Finalement Cohérente.
Disponibilité:
MongoDB obtient une haute disponibilité grâce à Réplique-Ensembles. Dès que le principal tombe en panne ou devient indisponible autre, puis les secondaires déterminera une nouvelle primaire sont de nouveau disponibles. Il y a un inconvénient à cela: Chaque écriture qui a été effectué par l'ancien primaire, mais pas synchronisés pour les secondaires seront restaurée et enregistré à une restauration de fichier, dès qu'il se reconnecte à l'ensemble(la vieille primaire secondaire par rapport à maintenant). Donc dans ce cas une certaine cohérence est sacrifié pour le bien de disponibilité.
Partition De La Tolérance:
Grâce à l'utilisation de ladite Réplique-Ensembles de MongoDB réalise également la partition de la tolérance: aussi longtemps Que plus de la moitié des serveurs d'un Jeu de Réplicas est relié à tous les autres, une nouvelle primaires peuvent être choisis. Pourquoi? Pour s'assurer de deux réseaux séparés ne peut pas à la fois choisir un nouveau primaire. Lorsqu'il n'est pas assez secondaires sont connectés les uns aux autres, vous pouvez toujours lire (mais la cohérence n'est pas assurée), mais pas écrire. L'ensemble est pratiquement inutilisable par souci de cohérence.
Comme un excellent article a montré jusqu'à, et aussi quelques génial expériences par Kyle dans ce champ, vous devez être prudent lors de l'étiquetage de MongoDB, et d'autres bases de données, comme le C ou A.
De cours CAP aide à traquer les sans beaucoup de mots, ce que la base de données l'emporte sur elle, mais les gens oublient souvent que C au CAP signifie cohérence atomique (linearizability), par exemple. Et cela m'a causé beaucoup de douleur à comprendre lorsque l'on essaie de classer. Donc, en plus de MongoDB donner une forte cohérence, cela ne signifie pas que le C. De cette façon, si l'on faire de cette classifications, j'ai recommandé de donner plus de profondeur dans la façon dont il fonctionne réellement pour ne pas laisser des doutes.
Oui, c'est le CP lors de l'utilisation de
safe=true
. Cela signifie simplement, les données pour les maîtres de disque.Si vous voulez vous assurer qu'il est également arrivé sur certaines répliques, regardez dans le 'w=N' paramètre où N est le nombre de réplicas les données doivent être enregistrées sur.
voir cette et cette pour plus d'informations.
Je ne suis pas sûr au sujet de P pour Mongo. Imaginez la situation:
Le problème ici est que le vidage de la taille du fichier est limitée et si vous aviez une partition pour un long temps, vous pouvez perdre vos données pour toujours.
Vous pouvez dire qu'il est peu probable de se produire - oui, à moins que, dans le nuage, où il est plus courant qu'on pourrait le penser.
Cet exemple est pourquoi je tiens à être très prudent avant d'attribuer une lettre à toute la base de données. Il ya tellement de nombreux scénarios et des mises en œuvre ne sont pas parfaits.
Si quelqu'un sait si ce scénario a été résolu dans les versions ultérieures de Mongo s'il vous plaît commentaire! (Je n'ai pas suivi tout ce qui se passait pendant un certain temps..)