2016-06-25 1 views
2

Dans la documentation MongoDB, here, il a été mentionné que dans un ensemble de réplicas, même avec major readConcern, nous obtiendrions une cohérence éventuelle. Je me demande comment cela est possible quand nous avons la majorité dans les lectures et les écritures, ce qui conduit à un quorum (R + W> N) dans notre système distribué? Je m'attends à un système cohérent fort dans ce cadre. C'est la technique que Cassandra utilise également pour obtenir une consistance forte.Comment obtenir une forte cohérence dans les jeux de répliques MongoDB?

Quelqu'un peut-il clarifier cela pour moi s'il vous plaît?

Répondre

3

MongoDb n'est pas très bien considéré en termes de consistance forte. Si vous avez une configuration typique sharded et répliquée pour augmenter la cohérence, vous devrez compenser une partie des performances de la base de données. Comme vous le savez, vous pouvez exécuter des opérations d'écriture uniquement sur le maître du jeu de réplicas. Par défaut, vous ne pouvez en lire que d'autres. C'est probablement la plus grande cohérence que vous pouvez obtenir de MongoDb AFAIK car les autres nœuds sont utilisés uniquement pour des raisons de réplication, de basculement et de disponibilité. Et vous pouvez lire à partir des nœuds secondaires uniquement pour les opérations où les dernières données ne sont pas cruciales et pour les opérations de longue durée, telles que l'agrégation par exemple.

Si vous configurez la fragmentation, vous pouvez décharger une grande partie des opérations de lecture/écriture sur différents nœuds principaux. Je pense que quand il s'agit de MongoDb, c'est tout ce que vous pouvez faire pour augmenter la cohérence et la performance, en particulier pour les jeux de données plus volumineux.

+0

Vous parlez de performances et d'évolutivité dans les lectures et les écritures qui peuvent être gérées par sharding. La cohérence éventuelle est importante uniquement lorsque vous souhaitez utiliser des nœuds secondaires dans un jeu de réplicas pour les opérations de lecture. Ma question est pourquoi nous n'avons pas une forte cohérence même si nous avons un quruom? –

+0

Le quorum n'est nécessaire que pour l'élection d'un primaire. Il ne peut pas tenir compte du décalage/retard du réseau et le serveur principal n'est pas obligé d'attendre que la transaction d'écriture soit rejouée sur tous les fichiers secondaires uniquement par souci de cohérence. Imaginez ce scénario: vous disposez de deux nœuds basés sur ssd pour les performances et le basculement et d'un nœud hdd moins coûteux pour les sauvegardes. Le noeud principal hautes performances doit-il attendre que l'opération se termine sur le membre le plus lent? –

+0

vote majoritaire est nécessaire pour l'élection primaire. Quorum signifie Lecteurs + Écrivains> Nombre de nœuds. Cette expression est vraie lorsque nous plaçons à la fois readConcern et writeConcern à la majorité. Ainsi, lorsque nous lisons à partir d'une majorité de nœuds, il y a au moins un nœud qui a la dernière écriture, et donc, le système est fortement cohérent. Je veux savoir pourquoi cette expression n'est pas vraie à propos de MongoDB? –