如果我将正常一致性级别设置为条件写入(LWT)会发生什么?

时间:2016-10-04 12:08:54

标签: cassandra cassandra-2.0 datastax-java-driver

我有6个节点集群,复制因子3.我使用正常一致性级别作为QUORUM,串行一致性级别作为SERIAL。

我有条件写查询(IF EXIST)。如果我使用下面的数据传输java驱动程序将normal和serial设置为此语句,会发生什么。

//preparedStatement has a conditional query.
BoundStatement boundStatement = new BoundStatement(preparedStatement);
boundStatement.setSerialConsistencyLevel(ConsistencyLevel.SERIAL);
//is this required??
boundStatement.setConsistencyLevel(ConsistencyLevel.QUORUM);

我的疑问:

  1. 是否会忽略正常的一致性QUORUM,还是会将其考虑在内?
  2. 在这种情况下,我应该只设置串行一致性级别吗?
  3. 我在下面提到的链接,但它没有解释太多 https://docs.datastax.com/en/cassandra/3.x/cassandra/dml/dmlConfigSerialConsistency.html

      

    学习阶段,定义了哪些读取操作将得到保证   如果正在进行轻量级写入,则立即完成使用a   正常的一致性水平。

    请用简单的语言解释。

1 个答案:

答案 0 :(得分:5)

串行一致性级别仅用于轻量级事务的Paxos阶段。如果该阶段成功,那么实际的突变(读或写)将使用" normal"指定的一致性级别。

所以回答你的问题:

  

是否会忽略正常的一致性QUORUM,还是会将其考虑在内?

如果轻量级事务成功并且执行了变异,则会将其考虑在内。

  

在这种情况下,我应该只设置串行一致性级别吗?

每个陈述都带有一致性级别。如果您未在语句级别指定任何内容,the defaults defined at cluster level apply