当前位置: 首页 > 知识库问答 >
问题:

Cassandra有多个具有相同派生和聚类键的行

席波娃
2023-03-14

有一个由5个节点组成的Cassandra集群。最近进行了从2.2.7到3.9版本的逐节点更新。更新是按照Datastax描述的过程进行的:升级指令。一切都很顺利。整个过程耗时约1小时。然而,几个小时后,我发现了以下问题:在更新期间,有些数据不一致,即对于特定的分区键和聚类键,只返回一行。但是对于同一个查询,有时返回一个,有时返回两个。

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不为null,而第二行有field1和field2不为null。其余损坏的数据也采用相同的模式

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

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';

共有1个答案

丁成弘
2023-03-14

升级到3.11并执行NodeTool擦洗。在3.0.11和3.11中修复的迁移中有一个bug

详见:https://issues.apache.org/jira/browse/cassandra-13125

 类似资料:
  • 我正在使用java。util。ServiceLoader创建轻量级插件框架。 我目前正在努力解决如何拥有多个具有相同FQN的实现类。我想在类路径上拥有同一个插件的两个副本,并且可以访问META-INF/services目录中给出的两个实现类。 以下是一些简单的eclipse项目,它们说明了我的意思:https://docs.google.com/open?id=0B4MxFm-ACB3IUmswN

  • 问题内容: 我有以下代码来获取地图: 如何打印带有重复键的消息“重复键”? 问题答案: 如何打印带有重复键的消息“重复键”? 使用当前代码,您将收到消息“重复键”,其中包含至少2个实例的列表,这些实例具有与对象相同的值,例如。 如何获得对应的密钥? 到目前为止,还无法获得相应的键,当前从合并功能中获得的实际上是与相同键映射的2个值,这些值需要合并以仅保留对应键的一个值。 您的问题是 Java 9

  • 我今天面试了,我的面试官问我如何在HashMap中存储具有相同键的多个值?她给了我这个例子—— 我在如何使用HashMap时给了她以下解决方案: 整数是字符串的长度,ArrayList将存储该特定长度的字符串。 面试官说这是使用HashMap的一种方式,但还有另一种方式我不需要ArrayList或任何其他数据结构。在面试期间,我无法想出任何解决方案,现在在谷歌搜索了足够多之后,我仍然一无所获。有人

  • 我有一个gradle android项目,有两个模块: 穿 在我的gradle配置中,我有不同的构建类型。默认设置(debug和release,每个都有自定义设置)以及dev和beta构建类型(也有自定义签名、自定义proguard和自定义applicationIdSuffix)。 我现在想做的是使用构建类型测试版(gradle清洁组件测试版)构建应用程序包。这就开始在测试版中构建应用程序,看到它

  • 为了理解TypeScript的精神,我在我的组件和服务中编写了全类型签名,这扩展到了angular2表单的自定义验证函数。 我知道我可以重载函数签名,但这需要每个返回类型的参数不同,因为将每个签名编译为单独的函数: 我还知道我可以返回单个类型(如Promise),它本身可以是多个子类型: 但是,在angular2自定义表单验证器的上下文中,单个签名(一个类型为的参数)可以返回两种不同的类型:带有表

  • 问题内容: 我遇到一个问题,当执行两个表的联接时,无法确定mysql查找具有两个特定“标签”和相同“ hashid”的链接 假设我的表看起来像这样: 链接 标签 我想返回同时具有“有用”和“很棒”标签的行 当前(工作/快速)查询,用于按1个标签查找链接: 阅读文章后,我尝试使用以下内容: 这 不 工作,但它是如此令人难以置信的缓慢,因为无法使用。 有人知道解决方案吗? 问题答案: 问题的类型称为