Cassandra 查询执行顺序与最终一致性问题
Cassandra query execution sequencing vs Eventual consistency issue
我对 cassandra 最终稳定性与查询排序感到困惑,我有以下问题
- 如果我按顺序发送 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
我对 cassandra 最终稳定性与查询排序感到困惑,我有以下问题
- 如果我按顺序发送 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