2016-06-09 3 views
2

Lors de l'utilisation de drapeaux dans Riak KV, le drapeau nécessite un contexte. Dans le client Elixir, le contexte est défini par Flag.new("my context"), sinon il lancera :context_required quand on essaiera de désactiver le drapeau.A quoi correspond le contexte pour les drapeaux dans Riak KV

Maintenant, le drapeau ne peut exister que dans une carte, et chaque élément de la carte doit avoir une clé, donc plusieurs drapeaux pourraient être dans une carte et être encore différenciés par une clé.

Quel est l'objectif du contexte si ce n'est de les différencier?

Répondre

3

Le drapeau de la carte a une sémantique de "ajouter des victoires" ou des "vraies victoires". Cette sémantique est obtenue en utilisant une technique de causalité appelée "Suppression observée" qui est empruntée à l'ensemble CRDT Observed-Remove. De plusieurs façons, le drapeau est juste un ensemble d'un seul élément nul qui est soit dans l'ensemble (drapeau est vrai) ou non dans l'ensemble (drapeau est faux.)

La valeur du bas des drapeaux est Faux. Quand il n'y a pas de clé pour le drapeau dans la carte, le drapeau est faux. C'est pourquoi vous ne pouvez pas ajouter une clé de drapeau avec la valeur False. L'ajout de la clé revient à définir le drapeau sur Vrai. L'ajout d'un indicateur entraîne l'obtention d'un point ou d'une étiquette causale par la clé. Si le drapeau est ajouté deux fois simultanément, il aura deux telles étiquettes causales. Lorsque l'indicateur est défini sur False, le contexte, ou les balises causales supprimées, doit être passé à Riak, ce qui garantit que certains paramètres simultanés à True (avec tag3) ne sont pas définis lorsque tag1 et tag2 sont supprimés. Voilà comment gagne gagne! La partie Observed-Remove est facilitée par le contexte: le contexte indique quels sont les tags causaux que vous avez observés, et par conséquent ceux que vous pouvez supprimer.