Apache spark Cassandra中频繁截断的问题和24小时ttl创建大型墓碑
下表为Apache spark Cassandra中频繁截断的问题和24小时ttl创建大型墓碑,apache-spark,spark-streaming,datastax-enterprise,cassandra-3.0,tombstone,Apache Spark,Spark Streaming,Datastax Enterprise,Cassandra 3.0,Tombstone,下表为ttl24小时或1天。我们有4个cassandra 3.0节点集群,在这个表上将有一个spark处理。处理后,它将截断表中的所有数据,并插入新的数据批。这将是一个持续的过程 我看到的问题是,我们越来越多的墓碑,因为在spark完成处理后,数据每天都被频繁地截断 如果我将gc\u grace\u seconds设置为默认值,将会有更多的墓碑。如果我将gc\u grace\u秒减少到1天,这会是一个问题吗?即使我每天修理那张桌子也够了 我知道频繁删除是Cassandra中的一种反模式,我该如何
ttl
24小时或1天。我们有4个cassandra 3.0节点集群
,在这个表上将有一个spark
处理。处理后,它将截断表中的所有数据,并插入新的数据批。这将是一个持续的过程
我看到的问题是,我们越来越多的墓碑
,因为在spark
完成处理后,数据每天都被频繁地截断
如果我将gc\u grace\u seconds
设置为默认值,将会有更多的墓碑。如果我将gc\u grace\u秒减少到1天,这会是一个问题吗?即使我每天修理那张桌子也够了
我知道频繁删除是Cassandra中的一种反模式,我该如何解决这个问题,还有其他方法解决这个问题吗
TABLE b.stag (
xxxid bigint PRIMARY KEY,
xxxx smallint,
xx smallint,
xxr int,
xxx text,
xxx smallint,
exxxxx smallint,
xxxxxx tinyint,
xxxx text,
xxxx int,
xxxx text,
xxxxx text,
xxxxx timestamp
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCom pactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandr a.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 86400
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';
谢谢表的截断不应调用墓碑。所以当你说“截断”时,我想你是指删除。如前所述,您可以删除gc\u grace\u seconds
值,但这意味着您有一个较小的窗口来运行修复,以协调任何数据,确保每个节点都有一个正确的墓碑,用于给定的键等,否则旧数据可能会重新出现。这是一种权衡
但是,为了公平起见,如果每次都要清除表,为什么不使用该命令,这样就可以清除表,而不清除任何墓碑。Truncate操作应与ALL或QUORM一致性级别一起使用?根据文档,哪一个是好的?如果副本节点关闭,其ALL但ALL将失败,但我希望我的truncate操作无论如何都能在过程中成功。使用QUORM进行truncate操作会有什么问题。您不需要使用truncate的一致性级别,它不遵循正常的写入路径,因为它是DDL操作,因此将通过gossipi传播到所有使用truncate table的节点,在从4节点群集执行truncate命令之前关闭了一个节点(关闭了一个节点),并收到一个错误消息TruncateError: