性能 - TTL 与在 Cassandra 中删除一行

Dur*_*eep 6 cassandra

我们有大量数据写入 cassandra 中的数百万行。我们还有一个调度器需要处理这些记录,并在处理成功后删除它们。

想知道是在处理后删除行还是使用 TTL 标记行(本质上是延迟删除)。

删除与 TTL wrt Cassandra 性能有什么优缺点吗?

非常感谢_DD

小智 5

使用 TTL 时,记录不会立即从存储中删除,而是标记为墓碑。只有在压实发生时它才会被物理移除。在那之前,数据会影响节点处理,因为它会消耗资源,直到发生压缩。当您执行范围查询事件时,Cassandra 会扫描已删除(标记为墓碑)的记录。所以使用 TTL 删除太多条目被认为是反模式。建议使用临时表,以便不需要删除单个行。只需放下整个桌子。


bec*_*hbd 4

从您在这里提供的少量信息来看,我觉得您正在使用 Cassandra 作为队列,这是一种众所周知的反模式。您可以在这里阅读更多相关内容:

http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets

然而,要回答您的基本问题,使用 TTL 和删除之间的性能几乎没有区别。C* 中的 TTL 被视为逻辑删除,与删除相同。主要区别在于,逻辑删除不会写入 TTL 已过期的记录,直到再次读取该记录。当调用删除时,会立即创建逻辑删除。一般来说,墓碑会在 C* 中造成严重的性能问题,虽然有一些方法可以缓解它们所造成的问题,但大量墓碑通常表明 C* 的数据模型较差或用例较差。如果您确实考虑使用 C* 作为队列,为什么不考虑使用更适合该目的的东西,例如 Redis?