Cassandra的轻量级交易& Paxos共识算法

标签 cassandra paxos consensus

我有一个关于 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}]

如果我再次执行它,那么它将不会被接受,因为 next_id != 1,我得到:

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

我的问题是 - 如果我从两个节点并行执行此查询会发生什么。他们有机会被录取吗?

(我的用例在 stackoverflow question 中描述)

最佳答案

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

关于Cassandra的轻量级交易& Paxos共识算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29408075/

相关文章:

angularjs - Node.js 的共识算法

consensus - raft算法如何在写入失败后节点故障的情况下保持强读一致性

database - 两阶段提交 : availability, 可伸缩性和性能问题

apache-spark - 将 Spark Structured Streaming 数据写入 Cassandra

cassandra - 获取 cassandra 表创建日期

distributed-computing - 在Paxos中,为什么我们不能使用随机退避来避免碰撞?

distributed-computing - paxos 是否提供真正的线性化一致性?

algorithm - Raft 节点数

cassandra - 使用 Cassandra 中的工具 sstable2json 将 JSON 写入输出文件

java - SoapUI JDBC 与 Apache Cassandra 的连接