Cassandra 查询执行顺序与最终一致性问题

Cassandra query execution sequencing vs Eventual consistency issue

我对 cassandra 最终稳定性与查询排序感到困惑,我有以下问题

  1. 如果我按顺序发送 2 个查询(没有打开 isIdempotent 属性)。第一个查询是删除记录,第二个查询是创建记录。是否有可能查询 2 在查询 1 之前执行。

我的 java 代码将如下所示

 public void foo(){
   delete(entity);//First delete a record
   create(entity); //Second create a record
}

另一件事我没有在我的查询中指定任何时间戳。

2) 我的第二个问题是,Cassandra 是最终一致的。如果我按顺序发送上述两个查询并且它没有被复制到所有节点,那么这些查询是否会在实际被复制到所有节点时保持顺序?

我试图查看 cassandra 文档,虽然它讨论了批处理操作中的查询排序,但没有讨论非批处理操作中的查询排序。

我正在使用 cassandra 2.1

默认情况下,在现代版本中,我们使用客户端时间戳。在此处查看驱动程序文档:

https://datastax.github.io/java-driver/manual/query_timestamps/

根据时间戳,如果创建的时间戳早于删除,C* 使用 LWW 启发式操作(最后写入获胜),查询将不会 return 数据。如果创建具有较新的时间戳,它会。

如果需要线性化,即保证某些操作按顺序执行,可以使用基于paxos的轻量级事务:

http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0