Cassandra的轻量级交易& Paxos共识算法
Cassandra's lightweight transactions & Paxos consensus algorithm
我有一个关于 Paxos 算法的非常特殊的问题,它是在 Cassandra 的轻量级事务中实现的:
如果两个节点同时发出同一个提案会怎样?他们都得到 '[applied]: true' ?
例如,考虑这个 table:
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}]
我的问题是 - 如果我从两个节点并行执行此查询会发生什么情况。他们有机会被录取吗?
(我的用例在 Whosebug question 中描述)
我有一个关于 Paxos 算法的非常特殊的问题,它是在 Cassandra 的轻量级事务中实现的:
如果两个节点同时发出同一个提案会怎样?他们都得到 '[applied]: true' ?
例如,考虑这个 table:
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}]
我的问题是 - 如果我从两个节点并行执行此查询会发生什么情况。他们有机会被录取吗?
(我的用例在 Whosebug question 中描述)