在Riak KV中使用标志时,标志需要上下文。在Elixir客户端中,上下文由Flag.new("my context")
设置,否则当尝试禁用该标志时,它将抛出:context_required
。
现在,该标志只能存在于Map中,并且映射中的每个元素都必须具有一个键,因此多个标志可以位于Map中,并且仍然可以通过键区分。
如果不区分它们,上下文的目的是什么?
答案 0 :(得分:3)
地图中的旗帜具有“添加胜利”或“真实胜利”的语义。这种语义是使用从Observed-Remove CRDT Set中借用的名为“Observed Remove”的因果关系技术实现的。在很多方面,Flag只是一个单个null元素的集合,它在集合中(flag为true)或者不在集合中(flag为false。)
Flags底部值为False。当Map中没有Flag的键时,Flag为false。这就是您无法添加带有False值的标志键的原因。添加密钥与将Flag设置为True相同。
添加标记会使密钥获得点或因果标记。如果标志同时添加两次,则会有两个这样的因果标记。当标志设置为False时,必须将删除的上下文或因果标记传递给Riak,这样可以确保在删除tag1和tag2时,某些并发设置为True(带有tag3)不会设置为false。这就是加赢的方式!上下文促进了观察 - 删除部分:上下文描述了您观察到的因果标记,以及您可以删除哪些因果标记。