2015-04-02 73 views
3

我有一個關於Paxos演算法一個非常特別的問題,這是在Cassandra的輕量級交易執行:Cassandra的輕量級的事務處理Paxos一致性算法

在同一時間,如果兩個節點問題,會發生什麼相同的建議?他們都得到'[應用]:真的'?

例如,請考慮此表:

ids: 
+-------------------+---------------+ 
| id_name (varchar) | next_id (int) | 
+-------------------+---------------+ 
| person_id   |    1 | 
+-------------------+---------------+ 

而這個查詢:

UPDATE ids 
SET next_id = 2 
WHERE id_name = 'person_id' 
IF next_id = 1 

如果我執行這個查詢,我得到的迴應:

[{[applied]: True}] 

如果我再次執行它,然後它將不會被接受,因爲next_id!= 1,我得到:

[{[applied]: False, next_id: 2}] 

我的問題是 - 如果我從兩個節點並行執行此查詢會發生什麼。他們是否有機會被接受?

(我用例是在這個stackoverflow question描述)

回答

1

這是不可能的,這兩個查詢將同時進行。對於每個查詢,都會創建一個提案,用於基於paxos達成一致意見。這將基於與提案相關的時間戳發生,其中相同的時間戳仍然會使兩個提議失敗。

4

Paxos的影響是查詢得到「線性化」:在兩個不同節點上的同一行上同時執行的兩個查詢將導致其中一個在另一個節點之後執行。而第二個則不適用。顯然,這兩個查詢都必須使用CAS才能工作。更多信息herehere