2017-06-02 146 views
0

想象有两个客户端client1和client2,都写入相同的密钥。此密钥有三个副本,分别命名为A,B,C。第一个接收client1的请求,然后是client2',而B接收client2的请求,然后接收client1的请求。现在A和B必须彼此不一致,即使使用矢量时钟也不能解决冲突。我对吗?Dynamo中的写入冲突

如果是这样,似乎很容易发生在发电机的写冲突。为什么这么多基于发电机设计的开源项目?

回答

0

不能谈论HBase,但我可以关于Cassandra,这是受Dynamo启发的。

如果发生在卡桑德拉,最近的关键胜利。

Cassandra使用协调器节点(可以是任何节点),它接收客户端请求并将它们重新发送到所有副本节点。每个请求的含义都有其自己的时间戳。

想象一下,客户端2具有最近的请求,即在客户端1之后的毫秒数。

  • 副本A收到客户端1,它被保存,然后客户端2,因为客户端2这是保存在客户端1是该密钥的最新信息。

  • 副本B接收已保存的客户端2,然后接收由于具有较旧的时间戳而被拒绝的客户端1。

副本A和B都有Client2,最新的信息,因此是一致的。

+0

明白了。谢谢你的解释。 – Edison