【问题标题】:What does the Context for Flags relate to in Riak KVRiak KV 中标志的上下文与什么有关
【发布时间】:2016-06-09 14:03:28
【问题描述】:

在 Riak KV 中使用标志时,标志需要上下文。在 Elixir 客户端中,上下文由 Flag.new("my context") 设置,否则当尝试禁用标志时会抛出 :context_required

现在,flag只能存在于一个Map中,而且map中的每个元素都必须有一个key,所以多个flag可以在一个Map中,仍然可以通过key来区分。

如果不区分它们,上下文的目的是什么?

【问题讨论】:

    标签: elixir riak crdt


    【解决方案1】:

    地图中的标志具有“添加胜利”或“真正胜利”的语义。这种语义是使用从 Observed-Remove CRDT Set 借用的一种称为“Observed Remove”的因果关系技术来实现的。在许多方面,Flag 只是单个空元素的集合,它要么在集合中(标志为真),要么不在集合中(标志为假)。

    标志底部值为 False。当 Map 中没有 Flag 的 key 时,Flag 为 false。这就是为什么您不能添加具有 False 值的标志键的原因。添加密钥与将Flag设置为True相同。

    添加标志会使键获得一个点或因果标记。如果该标志同时添加两次,它将有两个这样的因果标签。当标志设置为 False 时,上下文或要删除的因果标签必须传递给 Riak,这可确保在删除 tag1 和 tag2 时某些并发设置为 True(带有 tag3)不会被设置为 false。这就是添加获胜的方式! Observed-Remove 部分由上下文促进:上下文说明您观察到了哪些因果标签,因此您可以删除哪些标签。

    【讨论】:

      猜你喜欢
      • 2018-12-18
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 2017-04-23
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多