2016-06-09 31 views
2

Wenn Flags in Riak KV verwendet werden, erfordert das Flag einen Kontext. Im Elixir-Client wird der Kontext durch Flag.new("my context") festgelegt, andernfalls wird :context_required ausgelöst, wenn versucht wird, das Flag zu deaktivieren.Worin bezieht sich der Kontext für Flags in Riak KV

Jetzt kann das Flag nur in einer Map vorhanden sein, und jedes Element in der Map muss einen Schlüssel haben, sodass mehrere Flags in einer Map enthalten sein können und nach Schlüssel unterschieden werden können.

Was ist der Zweck des Kontextes, wenn nicht zwischen ihnen zu unterscheiden?

Antwort

3

Die Flagge in der Karte hat eine Semantik von "add wins" oder "true wins". Diese Semantik wird unter Verwendung einer Kausalitäts-Technik erreicht, die "Beobachtete Entfernung" genannt wird und aus dem CRDT-Satz "Beobachtet-Entfernen" entlehnt ist. In vielerlei Hinsicht ist das Flag nur eine Menge eines einzelnen Nullelements, das entweder im Set ist (Flag ist wahr) oder nicht im Set (Flag ist falsch).

Der untere Wert der Flags ist False. Wenn in der Karte kein Schlüssel für die Flagge vorhanden ist, ist die Flagge falsch. Aus diesem Grund können Sie keinen Flag-Schlüssel mit dem Wert False hinzufügen. Das Hinzufügen des Schlüssels entspricht dem Setzen des Flags auf True.

Durch das Hinzufügen eines Flags erhält der Schlüssel einen Punkt oder ein kausales Tag. Wenn das Flag zweimal gleichzeitig hinzugefügt wird, hat es zwei solche kausalen Tags. Wenn das Flag auf False gesetzt ist, müssen die Kontext- oder Kausal-Tags, die entfernt werden, an Riak übergeben werden. Dies stellt sicher, dass einige gleichzeitige Einstellungen auf True (mit tag3) nicht falsch gesetzt werden, wenn Tag1 und Tag2 entfernt werden. So gewinnt Add! Der Observed-Remove-Teil wird durch den Kontext erleichtert: Der Kontext gibt an, welche kausalen Tags Sie beobachtet haben und welche Sie daher entfernen können.