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

时间:2016-06-03 23:04:01

标签: datastax datastax-enterprise cassandra-2.1 cassandra-cli spring-data-cassandra

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

  1. 如果我按顺序发送2个查询(不打开isIdempotent属性)。第一个查询是删除记录,第二个查询是创建记录。查询2是否可能在查询之前执行。
  2. 我的java代码看起来像这样

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

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

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

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

    我正在使用cassandra 2.1

1 个答案:

答案 0 :(得分:0)

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

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

基于时间戳,如果创建具有比删除更早的时间戳,则C *使用LWW启发式(最后写入获胜)进行操作,查询将不返回数据。如果创建具有更新的时间戳,它将会。

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

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