我可以在 Riak 中使用 vclock 获得冲突吗?



我想知道在这种情况下我是否会发生冲突:

#!/usr/bin/env bash
curl -XPUT -d '{"bar":"baz"}' 
     -H "Content-Type: application/json"  
     http://127.0.0.1:8098/riak/obj/1
response=$(curl -I http://127.0.0.1:8098/riak/obj/1 | grep 'X-Riak-Vclock:' | egrep -o ' .*$')
curl -v -XPUT -d '{"bar":"foo"}' 
     -H "Content-Type: application/json"  
     -H "X-Riak-Vclock: $response" 
     http://127.0.0.1:8098/riak/obj/1

换句话说:

首先,我没有键的对象,1我将{"bar":"baz"}值与 http api 的 PUT 放在一起。

然后,我用 get 读取值。我将 vclock 存储在变量中。

最后,我为关键1放置了一个新的值{"bar":"foo"}

有没有我可以{"bar":"baz"}密钥1的情况?如果里亚克有冲突,会用vclock解决吗?

谢谢!

这取决于您的 Riak 数据库的配置方式,无论是全局配置还是更改了正在使用的存储桶的默认配置。如果您保留默认配置,您的第二个 PUT(带有 vclock(可能会:- 失败,如果有人在您背后更新了密钥(罕见(,并且您拥有的 VCLOCK 数据已经过时。您需要重新读取该值并更新它。最好是有一个重试机制。- 失败,如果您拥有的写入一致性约束过于严格,并且关闭的节点过多(很少见(。通常默认的读写配置是理智的。- 成功,如果 VCLOCK 数据对此密钥仍然有效(大多数时间(

如果成功,则可能是网络拓扑处于裂脑状态。在这种情况下,Riak 将使用 V 时钟数据本身解决问题。

相关内容

  • 没有找到相关文章

最新更新