从没有墓碑和 ttl 的 Cassandra 中删除整个分区?

Posted

技术标签:

【中文标题】从没有墓碑和 ttl 的 Cassandra 中删除整个分区?【英文标题】:Delete whole partition from Cassandra without tombstones and ttl? 【发布时间】:2018-10-16 23:05:29 【问题描述】:

是否可以从 Cassandra 表中删除整个分区,而无需写入墓碑并等待 gc_grace_period 并运行压缩?

【问题讨论】:

【参考方案1】:

从未在 gc_grace_period 之前。但这是一件好事,你可以控制它。如果您知道墓碑的用途,那么您可以理解在分布式删除中,如果一个节点死了一段时间,您可能会得到删除的数据,或者会产生一些一致性问题。对于单个节点,可以设置gc_grace_period为0。但是对于多节点,这个值应该大于0。对于某些表的频繁删除,如果你担心生成很多tombstones,你可以为这些表设置小的gc_grace但是考虑节点故障情况并根据需要进行处理。

一些链接:

Deletes Without Tombstones or TTLsAbout deletes in Cassandra

编辑答案

范围墓碑是一种基于分区键的有效删除方式。这会为整行创建单个 tombstone,从而减少范围读取读取的 tombstone 数量以及需要通过压缩合并或清理的 tombstone 数量。

来自@mando222 & 我分享的链接。请阅读给定的链接。你会得到答案的。

有不同类型的删除。整个分区删除(或单行删除)、单列删除、范围删除。如果您删除单个行或分区而不提及列,则将只为该行或整个分区创建一个墓碑。 他们没有为每个单元格设置单独的墓碑,而是有一个范围的墓碑。

如果您执行范围删除,则位于范围中的某些行也会为该范围创建一个墓碑。

更少的墓碑产生更快的读取速度,更快,更便宜 压实。

【讨论】:

我还要补充一点,您可以删除分区并拥有一个墓碑,而不是删除行并获得很多。 TLP 不久前有一篇很棒的文章。这比将 gc_grace 设置为 0 安全得多。 如何删除一个分区并拥有一个单独的分区? @mando222 这似乎很适合我的用例 @rajat TLP 有一篇很棒的文章可能有助于您理解它。 thelastpickle.com/blog/2016/07/27/…

以上是关于从没有墓碑和 ttl 的 Cassandra 中删除整个分区?的主要内容,如果未能解决你的问题,请参考以下文章

Cassandra 什么是墓碑

Cassandra 数据上的 TTL Remover

在 cassandra 的地图中添加新值/更新现有值是不是会创建墓碑?

ttl过期时如何从cassandra中删除陈旧数据

如何使用 Achilles 更新 cassandra 中的 TTL,如果不存在则抛出异常

LCS 上的主要压缩