我们想用简单主键创建一个由UUID列组成的Cassandra表。
该表将如下所示:
CREATE TABLE simple_table(
id UUID PRIMARY KEY,
col1 text,
col2 text,
col3 UUID
);
此表可能存储数十亿行,并且使用TTL功能,这些行应在一段时间(数月)后过期。 关于此表的效率,我有几个问题:
答案 0 :(得分:1)
在您的情况下,主键等于分区键,因此您拥有所谓的“瘦”分区,由一行组成。如果删除数据,则只有逻辑删除,而不是分区内的数据,这不是问题。如果数据已过期,则将在压缩过程中将其删除-gc_grace_period
在此处不应用-仅当您明确删除数据时才需要-我们需要保留逻辑删除,因为其他节点可能需要“追赶” ”(如果更改无法接收删除操作)。您可以在following document中找到有关数据删除的更多详细信息。
当您在同一个分区中有许多行(例如数千行)时,例如如果您使用多个集群键,就会出现逻辑删除问题。并且当删除此类数据时,将生成逻辑删除,并且当我们在分区内读取数据时应跳过该逻辑删除。
P.S。您是否看到过这个blog post来解释删除的过程?
答案 1 :(得分:0)
在阅读@Alex提到我的博客(和评论)之后,我得出结论,由于表的default_time_to_live
,为过期的行创建了逻辑删除。
只有经过gc_grace_periods
之后,这些墓碑才会被清理。参见此stack overflow question。
关于我的第一个问题,这个datastax page很好地描述了它。