2017-06-02 142 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