Cassandra 卡桑德拉';s轻量交易&;Paxos一致性算法

Cassandra 卡桑德拉';s轻量交易&;Paxos一致性算法,cassandra,paxos,consensus,Cassandra,Paxos,Consensus,关于Paxos算法,我有一个非常特别的问题,它是在Cassandra的轻量级事务中实现的: 如果两个节点同时发布相同的提案会发生什么情况?它们都得到“[applied]:true”吗? 例如,考虑此表: ids: +-------------------+---------------+ | id_name (varchar) | next_id (int) | +-------------------+---------------+ | person_id |

关于Paxos算法,我有一个非常特别的问题,它是在Cassandra的轻量级事务中实现的:

如果两个节点同时发布相同的提案会发生什么情况?它们都得到“[applied]:true”吗?

例如,考虑此表:

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}]
如果我再次执行它,那么它将不会被接受,因为下一个\u id!=1、我得到:

[{[applied]: False, next_id: 2}]
我的问题是-如果我并行地从两个节点执行这个查询,会发生什么。他们俩都有被录取的机会吗


(我的用例在这里描述)

不可能同时执行两个查询。对于每个查询,都会创建一个提案,用于根据paxos达成共识。这将基于与提案相关联的时间戳发生,其中相同的时间戳仍将使两个提案中的一个失败

Paxos的效果是查询得到“线性化”:在两个不同节点上的同一行上同时执行两个查询将导致其中一个查询在另一个之后执行。第二种方法将不适用。显然,这两个查询都必须使用CAS才能工作。更多信息和信息