Database 写入路径失败时的Cassandra读取一致性
我对cassandra还不熟悉,我试图弄清楚cassandra如何在写入失败的情况下提供一致性。考虑下面的情形,其中CL是法定人数,在这种情况下,3个副本中的2个必须响应。写入请求将像往常一样发送到所有3个副本,如果写入2个副本失败,并且在1个副本上成功,cassandra将返回Failed。由于cassandra不会回滚,记录将继续存在于成功的复制副本上。现在,当读取带有CL=QUORUM时,读取请求将转发到2个副本节点,如果其中一个副本节点是先前成功的,则cassandra将返回新记录,因为它将具有最新的时间戳。但从客户机的角度来看,这个记录根本没有被写入,因为cassandra在写入过程中返回了失败。 如果是这种情况,那么卡桑德拉在这种情况下将永远不会保持一致。 如何处理这种情况Database 写入路径失败时的Cassandra读取一致性,database,cassandra,cassandra-2.0,cassandra-2.1,eventual-consistency,Database,Cassandra,Cassandra 2.0,Cassandra 2.1,Eventual Consistency,我对cassandra还不熟悉,我试图弄清楚cassandra如何在写入失败的情况下提供一致性。考虑下面的情形,其中CL是法定人数,在这种情况下,3个副本中的2个必须响应。写入请求将像往常一样发送到所有3个副本,如果写入2个副本失败,并且在1个副本上成功,cassandra将返回Failed。由于cassandra不会回滚,记录将继续存在于成功的复制副本上。现在,当读取带有CL=QUORUM时,读取请求将转发到2个副本节点,如果其中一个副本节点是先前成功的,则cassandra将返回新记录,因为
请让我知道您的理解是否正确。您的理解是否正确。在这种情况下,客户端应接收到
不可用异常
,但应了解写入操作最终将传播到其他副本(如果节点处于活动状态或开始处于活动状态),并且这不是失败的写入操作
有关更多详细信息,请参阅以下文章: