避免在riak中发生关键冲突?

时间:2015-05-21 14:25:02

标签: riak

很抱歉,这个问题听起来很愚蠢。我理解Riak最终是一致的而不是原子的,因此需要以某种方式处理冲突,无论是Riak还是应用程序。但是,我似乎无法弄清楚如何避免关键冲突。

例如,假设我在Riak中有一个带有键apple的对象。如何防止具有该键的新对象的创建成功?似乎只有update操作,但不是create。如果我使用apple密钥创建一个全新的对象并将其写入Riak会发生什么 - 这只会覆盖现有的副本吗?这听起来非常可怕。

当同一个密钥发生两个并发创建时会发生什么?也就是说,两个完全无关的对象被写入riak,两者都希望拥有apple密钥。他们中的一个会失败,怎么样?

谢谢!

1 个答案:

答案 0 :(得分:0)

如何写(或不写)相同的键取决于应用程序的逻辑。您可能希望更新现有记录,在这种情况下,写入相同的密钥非常有意义。如果您想确保错误地没有两条记录写入同一个密钥,请尝试在您的商店请求中设置IF_NONE_MATCH(或在您的Riak客户端版本中调用它)。

如果在您的应用程序中可以同时写入同一个键,则应该使用临时上下文并在客户端或服务器端实现冲突解决http://docs.basho.com/riak/latest/dev/using/conflict-resolution/