使用cassandra时,如果你执行以下两个cql,第二个就不会成功。
insert into job_info (id, create_time) values (5be224c6-8231-11e7-9619-9801b2a97471, 0) IF NOT EXISTS;
insert into job_info (id, create_time) values (5be224c6-8231-11e7-9619-9801b2a97471, 1);
键空间和表格如下:
CREATE KEYSPACE scheduler WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true;
CREATE TABLE scheduler.job_info (
id timeuuid PRIMARY KEY,
create_time int
) with caching = {'keys':'ALL', 'rows_per_partition':'NONE'};
我在https://issues.apache.org/jira/browse/CASSANDRA-13767上发布了这个问题,并且commant说:
您正在混合LWT / Paxos查询({{IF NOT EXISTS}}, 时间戳以自己的方式,"正常"查询,这是已知的 在订购方面导致不可预测的结果(这里发生了什么 不是第二次插入失败,它被分配了一个 时间戳低于第一个查询,因此被忽略)。长 简而言之,不要将LWT / Paxos查询与其他查询混合(至少 在同一个分区上),你将避免问题。
我的问题是,LWT / Paxos查询和"正常"之间有什么区别?查询'时间戳?
第一个cql和第二个cql可以间隔很多秒执行,但第二个cql仍然没有成功。那么,它真的是时间戳造成的问题吗?