2016-06-09 5 views
2

При использовании флагов в Riak KV для флага требуется контекст. В клиенте Elixir контекст задается Flag.new("my context"), в противном случае он будет выкидывать :context_required при попытке отключить флаг.Что касается контекста для флагов в Riak KV

Теперь флаг может существовать только на карте, и каждый элемент на карте должен иметь ключ, поэтому несколько флагов могут быть на карте и по-прежнему быть дифференцированы по ключу.

Какова цель контекста, если не проводить различия между ними?

ответ

3

Флаг на карте имеет семантику «добавить победы» или «настоящие победы». Эта семантика достигается с помощью метода причинности, называемого «Observed Remove», который заимствован из набора Observed-Remove CRDT. Во многих отношениях флаг - это всего лишь набор одного нулевого элемента, который находится либо в наборе (флаг является истинным), либо нет в наборе (флаг является ложным).

Нижнее значение флага - False. Если на карте нет ключа для флага, флаг будет ложным. Вот почему вы не можете добавить флаг с False значением. Добавление ключа совпадает с установкой флажка в значение True.

Добавление флага заставляет ключ получить точку или причинный тег. Если флаг добавляется дважды одновременно, он будет иметь два таких причинных тега. Когда флаг установлен в False, контекст или причинные теги, которые удаляются, должен быть передан Riak, это гарантирует, что некоторые параллельные установки в True (с tag3) не будут установлены false, когда теги и тег2 будут удалены. Вот как прибавляет выигрыш! Части Observed-Remove облегчаются контекстом: контекст говорит о том, какие каузальные метки вы наблюдаете, и, следовательно, какие из них вы можете удалить.