Cassandra:分区删除后重新插入行会导致更多的墓碑

Cassandra:分区删除后重新插入行会导致更多的墓碑,cassandra,tombstone,Cassandra,Tombstone,我有一个Cassandra数据库,我注意到了以下行为: 在分区中插入一组行。大多数列都是原始数据类型,而不是集合或复合数据类型 删除分区(导致一个墓碑) 将相同的行重新插入分区(结果是每行每列出现逻辑删除) 由于墓碑太多,后续select查询失败 步骤3中的墓碑创建行为。这让我感到惊讶和意外。不应该在步骤2中删除分区范围的墓碑。防止旧数据死灰复燃?在步骤3中。为什么卡桑德拉要插入每列墓碑 如果可能的话,请提供一个指向此行为文档的指针(最后手段:Cassandra源代码),或者我看到墓碑乘法是由于

我有一个Cassandra数据库,我注意到了以下行为:

  • 在分区中插入一组行。大多数列都是原始数据类型,而不是集合或复合数据类型
  • 删除分区(导致一个墓碑)
  • 将相同的行重新插入分区(结果是每行每列出现逻辑删除)
  • 由于墓碑太多,后续select查询失败
  • 步骤3中的墓碑创建行为。这让我感到惊讶和意外。不应该在步骤2中删除分区范围的墓碑。防止旧数据死灰复燃?在步骤3中。为什么卡桑德拉要插入每列墓碑

    如果可能的话,请提供一个指向此行为文档的指针(最后手段:Cassandra源代码),或者我看到墓碑乘法是由于其他原因吗

    谢谢

    编辑:更多细节

    架构:列名已更改以保护

    插入:在C++代码中,具有一致性LoalAlqQualU:

    TTL至少是未来一年

    删除分区:在Python代码中,具有一致性所有:


    重新插入:与上面的插入相同,但数据1和数据2的值可能不同。

    显示用于插入的代码和数据。。。
    CREATE TABLE keyspace.transactions (
      r_b: int,
      r_sn: int,
      r_a: int,
      r_d: int,
      r_s: int,
      t_s: int,
      data_1: int,
      data_2: text,
      ...,
      PRIMARY KEY ((r_b, r_sn, r_a, r_d, r_s), t_s))
    WITH CLUSTERING ORDER BY (t_s ASC)
      AND read_repair_chance = 0.0
      AND dclocal_read_repair_chance = 0.1
      AND gc_grace_seconds = 864000
      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' : 2 }
      AND compression = { 'chunk_length_in_kb' : 64, 'class' : 'org.apache.cassandra.io.compress.LZ4Compressor'}
      AND default_time_to_live = 0
      AND speculative_retry = '99PERCENTILE'
      AND min_index_interval = 128
      AND max_index_interval = 2048
      AND crc_check_chance = 1.0
      AND cdc = false
      AND memtable_flush_period_in_ms = 0;
    
    INSERT INTO transactions (
      r_b, r_sn, r_a, r_d, r_s, t_s, data_1, data_2, ... )
      VALUES (?, ?, ?, ...) USING TTL ?
    
    DELETE FROM transactions
      WHERE r_b = ?
      AND r_sn = ?
      AND r_a = ?
      AND r_d = ?
      AND r_s = ?;