我想知道在这种情况下我是否会发生冲突:
#!/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 时钟数据本身解决问题。