我理解在Mongo中我们可以有一个主设备和多个从设备,其中主设备将用于写入,从设备将用于读取操作。假设M1,M2,M3是M1为主的节点
但我读过Cassandra据说是一个无主人模特。每个节点都被称为主节点。我没有明白这意味着什么?
假设M1,M2,M3是以M1为主,M2为M3的节点,M3为Mongo的从属节点 我相信写入将始终为M1,读取将始终为M2,M3
假设C1,C2,C3是Cassandra中的节点 在这里,我相信写入和读取请求可以转到任何节点。这就是为什么它被称为无主模型。
答案 0 :(得分:4)
你是对的,Cassandra中的节点是相同的,所有节点都可以响应用户的查询。这是因为Cassandra在CAP Theorem中选择可用性和分区容差(而MongoDB选择一致性和分区容差)。 Cassandra可以通过简单地在节点环中添加新节点来处理更多数据,从而实现线性可扩展性。
这里的权衡是一致性问题。在Cassandra,他们提供称为复制因子和一致性级别的解决方案,以确保尽可能保持一致性,同时保持强大的可用性。
以下是对Cassandra中读,写和复制工作原理的一个很好的解释:brief-introduction-apache-cassandra
答案 1 :(得分:0)
在Cassandra中,Masterless意味着任何人都可以处理请求。接收请求的节点称为协调节点,其职责是协调读/写请求。
协调器节点使用基于仲裁的协议来处理读/写操作。根据一致性级别,它从已识别的节点发出R
读取请求,这些节点可能具有数据,然后比较数据时间戳并返回最新更新的节点。
对于所有响应过时数据的节点,然后发送更新请求,以便他们现在可以获得最新数据,这可能被称为提示修复。
同样的事情也发生在写入中,它等待至少说出关于写入成功的w节点确认,然后才宣布操作成功。
特定数字(r& w)的选择定义了所使用的一致性级别。让我们说一些读数的总和&写入节点超过总可用节点(N)(r + w> = N),那么您始终可以保证拥有最新数据,但这是以可用性为代价的。
类似地,如果r + w < N,一致性受到影响,但系统的可用性增加。