Cassandra有多个具有相同分区和聚类键的行

Cassandra有多个具有相同分区和聚类键的行,cassandra,Cassandra,有一个由5个节点组成的Cassandra集群。最近,一个节点一个节点地完成了从2.2.7到3.9版本的更新。已根据所述过程完成更新:。一切进展顺利。整个过程耗时约1小时。 然而,几个小时后,我发现了以下问题: 对于更新期间,某些数据不一致,即对于特定分区键和集群键,只应返回一行。但是,对于同一个查询,有时返回一个,有时返回两个 该表有以下主键:((id,年份),日期时间)。那么,查询 SELECT * FROM table_name WHERE id=1 and year=2017 and

有一个由5个节点组成的Cassandra集群。最近,一个节点一个节点地完成了从2.2.7到3.9版本的更新。已根据所述过程完成更新:。一切进展顺利。整个过程耗时约1小时。 然而,几个小时后,我发现了以下问题: 对于更新期间,某些数据不一致,即对于特定分区键和集群键,只应返回一行。但是,对于同一个查询,有时返回一个,有时返回两个

该表有以下
主键:((id,年份),日期时间)
。那么,查询

SELECT * FROM table_name 
  WHERE id=1 and year=2017 and datetime='2017-01-01T01:01:01:000Z';
有时返回一行,有时返回两行

而且,这些行是不同的,只有主键的字段是相同的

结果示例:

id | year | datetime                | field1 | field2 | field3 | field4
---+------+-------------------------+--------+--------+--------+--------
1  | 2017 | 2017-01-01 01:01:01.000 |   null |   null |      5 |      6
1  | 2017 | 2017-01-01 01:01:01.000 |      3 |      4 |   null |   null
因此,如您所见,第一行有字段:field3和field4不为空,而第二行有field1和field2不为空。其余损坏的数据也采用相同的模式

此外,一旦我尝试删除这些行,只有第一行消失,第二行保留。我确信字段“datetime”是相同的,这不是问题,因为blobAsBigint(timestassablob(datetime))为两行返回相同的值

所做的工作:

节点工具升级表my_键空间(在每个节点上逐个)

nodetool修复我的_键空间(在每个节点上逐个修复)

需要upgradesstable,因为最初修复返回“Validation failed”错误:

创建表my\u keyspace.my\u表(
id bigint,
整年,
日期时间戳,
字段1 int,
字段2 int,
第三场,
字段4布尔值,
field5地图,
字段6时间戳,
字段7十进制,
字段8十进制,
主键((id,年份),日期时间)
)使用群集顺序(日期时间ASC)
布卢姆过滤器概率=0.01
和缓存={'keys':'ALL','rows\u per\u partition':'NONE'}
和注释=“”
和compression={'class':'org.apache.cassandra.db.compression.SizeTieredCompactionStrategy','max_threshold':'32','min_threshold':'4'}
压缩={'chunk_length_in_kb':'64','class':'org.apache.cassandra.io.compress.LZ4Compressor'}
和crc检查机会=1.0
和dclocal\u read\u repair\u chance=0.1
并且默认的\u time\u to\u live=0
gc_grace_秒=864000
最大指数间隔=2048
和memtable_flush_period_in_ms=0
最小索引间隔=128
并读取_repair_chance=0.0
推测性_重试='99百分位';

升级到3.11并执行
节点工具清理
。在3.0.11和3.11中修复了迁移中的一个bug


请参阅:有关详细信息

能否为包含类型的表包含完整模式?如果这说明了更多,我已经将模式包含在类型中。。
CREATE TABLE my_keyspace.my_table (
    id bigint,
    year int,
    datetime timestamp,
    field1 int,
    field2 int,
    field3 set<bigint>,
    field4 boolean,
    field5 map<int, text>,
    field6 timestamp,
    field7 decimal,
    field8 decimal,
    PRIMARY KEY ((id, year), datetime)
) WITH CLUSTERING ORDER BY (datetime ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';