【问题标题】:Cassandra query execution sequencing vs Eventual consistency issueCassandra 查询执行顺序与最终一致性问题
【发布时间】:2016-10-04 03:02:13
【问题描述】:

我对 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

【问题讨论】:

  • 看看 LWT。请注意,对于大多数用例,您可能不需要它。
  • 其实我想知道在没有 lwt 的情况下如何在 Cassandra 中进行排序
  • 最后一次写入按时间戳获胜
  • 如果我的评论正确,这意味着,如果客户删除了一条记录,并在一秒钟内创建了一条具有相同参数的记录,那么创建可能会在删除之前执行?

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


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-05
    • 2017-06-28
    • 2014-10-13
    • 2017-02-23
    • 1970-01-01
    • 2017-08-11
    • 2023-03-10
    • 2011-06-02
    相关资源
    最近更新 更多