我在独立的Cassandra实例中看到Cassandra轻量级事务的一些有趣行为。我正在使用DataStax Enterprize 5.0.2进行测试。问题是,使用轻量级事务更新的表返回true,这意味着它已更新。但是对同一个表的后续查询显示该行未更新。请注意,我在集群环境中尝试了相同的操作,它工作得非常好!所以我只是想了解我的环境中出了什么问题。
以下是我正在做的一个简单示例。
我创建了一个简单的表格,如下所示:
CREATE TABLE smart.TOPICSCONSUMERASSNSTATUS (
TOPNM text,
PARTID int,
STATUS text,
PRIMARY KEY (TOPNM,PARTID)
);
我将以下一组预加载数据用于测试目的:
insert into smart.topicsconsumerassnstatus (topnm, partid, status) values ('ESP', 0, 'UNASSIGNED');
insert into smart.topicsconsumerassnstatus (topnm, partid, status) values ('ESP', 1, 'UNASSIGNED');
insert into smart.topicsconsumerassnstatus (topnm, partid, status) values ('ESP', 2, 'UNASSIGNED');
insert into smart.topicsconsumerassnstatus (topnm, partid, status) values ('ESP', 3, 'UNASSIGNED');
insert into smart.topicsconsumerassnstatus (topnm, partid, status) values ('ESP', 4, 'UNASSIGNED');
现在,我把第一个select语句从表中获取详细信息:
select * from smart.topicsconsumerassnstatus where topnm='ESP';
列出状态为UNASSIGNED的所有partid。为了分配partid 0,我然后触发以下更新语句:
update smart.topicsconsumerassnstatus set status='ASSIGNED' where topnm='ESP' and partid=0 if status='UNASSIGNED';
它返回true。现在,当我再次触发上面的选择查询时,它会列出状态为UNASSIGNED的所有5行。有趣的是,重复执行update语句始终保持返回true - 这显然意味着实际数据未在表中更新。
我也看到了查询跟踪,并且当CAS成功返回时,更新似乎正常工作。
另请注意,当查询与"允许过滤"一起使用时,会明确看到此行为。至少一次,从那时起...
任何人都可以对可能出现的问题进行一些说明吗?是否与"允许过滤"条款?