Riak KV 中标志的上下文与什么相关

What does the Context for Flags relate to in Riak KV

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

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

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

Map 中的 Flag 具有 "add wins" 或 "true wins" 的语义。这种语义是使用一种称为 "Observed Remove" 的因果关系技术实现的,该技术借鉴自 Observed-Remove CRDT Set。在许多方面,Flag 只是一组单个空元素,它要么在集合中(标志为真),要么不在集合中(标志为假。)

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

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