Cassandra简单主键查询

时间:2018-10-18 11:37:39

标签: cassandra datastax cql

我们想用简单主键创建一个由UUID列组成的Cassandra表。 该表将如下所示:
CREATE TABLE simple_table( id UUID PRIMARY KEY, col1 text, col2 text, col3 UUID );

此表可能存储数十亿行,并且使用TTL功能,这些行应在一段时间(数月)后过期。 关于此表的效率,我有几个问题:

  1. 使用主键对该表进行查询的效率如何?意思是,Cassandra在解决它所在的分区后如何找到特定的行?
  2. 考虑到行将到期并创建许多逻辑删除,这将如何影响对该表的读取和写入?假设我们在180天后使数据过期,如果我没记错的话,墓碑的比例将是10/180〜= 0.056(当10是天的gc_grace_periods时)。

2 个答案:

答案 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很好地描述了它。