Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 写入路径失败时的Cassandra读取一致性_Database_Cassandra_Cassandra 2.0_Cassandra 2.1_Eventual Consistency - Fatal编程技术网

Database 写入路径失败时的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将返回新记录,因为

我对cassandra还不熟悉,我试图弄清楚cassandra如何在写入失败的情况下提供一致性。考虑下面的情形,其中CL是法定人数,在这种情况下,3个副本中的2个必须响应。写入请求将像往常一样发送到所有3个副本,如果写入2个副本失败,并且在1个副本上成功,cassandra将返回Failed。由于cassandra不会回滚,记录将继续存在于成功的复制副本上。现在,当读取带有CL=QUORUM时,读取请求将转发到2个副本节点,如果其中一个副本节点是先前成功的,则cassandra将返回新记录,因为它将具有最新的时间戳。但从客户机的角度来看,这个记录根本没有被写入,因为cassandra在写入过程中返回了失败。 如果是这种情况,那么卡桑德拉在这种情况下将永远不会保持一致。 如何处理这种情况
请让我知道您的理解是否正确。

您的理解是否正确。在这种情况下,客户端应接收到
不可用异常
,但应了解写入操作最终将传播到其他副本(如果节点处于活动状态或开始处于活动状态),并且这不是失败的写入操作

有关更多详细信息,请参阅以下文章:


卡桑德拉对最终的一致性有偏见。所以,如果你仍然想要一致性,你必须重新考虑卡桑德拉是否适合你。或者使用RF是复制因子=3共享链接的次数。在上面的场景中,由于在写入期间不满足CL,cassandra将返回writeTimeOut。在一个副本节点上成功的写操作最终会传播到其他节点吗?