很抱歉,这个问题听起来很愚蠢。我理解Riak最终是一致的而不是原子的,因此需要以某种方式处理冲突,无论是Riak还是应用程序。但是,我似乎无法弄清楚如何避免关键冲突。
例如,假设我在Riak中有一个带有键apple
的对象。如何防止具有该键的新对象的创建成功?似乎只有update
操作,但不是create
。如果我使用apple
密钥创建一个全新的对象并将其写入Riak会发生什么 - 这只会覆盖现有的副本吗?这听起来非常可怕。
当同一个密钥发生两个并发创建时会发生什么?也就是说,两个完全无关的对象被写入riak,两者都希望拥有apple
密钥。他们中的一个会失败,怎么样?
谢谢!
答案 0 :(得分:0)
如何写(或不写)相同的键取决于应用程序的逻辑。您可能希望更新现有记录,在这种情况下,写入相同的密钥非常有意义。如果您想确保错误地没有两条记录写入同一个密钥,请尝试在您的商店请求中设置IF_NONE_MATCH(或在您的Riak客户端版本中调用它)。
如果在您的应用程序中可以同时写入同一个键,则应该使用临时上下文并在客户端或服务器端实现冲突解决http://docs.basho.com/riak/latest/dev/using/conflict-resolution/