我们希望使用Riak的链接创建一个双向链表。
它的算法非常简单,我相信:
我们遇到的问题是这里存在明显的竞争条件,因为如果2个并发客户端获得列表的头部,则其中一个项目可能会“丢失”。有什么办法可以避免吗?
答案 0 :(得分:2)
当谈到CAP定理时,Riak是一个最终一致的系统。
如果您设置了存储桶属性allow_multi=true
,如果两个并发客户端获得列表的头部然后写入,您将拥有兄弟记录。在下次阅读时,您将收到多个值(兄弟姐妹),然后必须解决冲突并写入结果。鉴于我们没有任何原子性,当您尝试更新链接对象时,这可能会导致在写入并发繁重时出现额外冲突。不是不可能解决,但绝对是棘手的。
最好只将整个列表序列化为单个对象。这使您的冲突解决方案更多更简单。