首页 文章

Cassandra简单的主键查询

提问于
浏览
1

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

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

  • 使用主键查询此表的效率是多少?意思是,Cassandra在解析它所在的分区后如何找到特定的行?

  • 考虑到行将过期并创建许多逻辑删除,这将如何影响对此表的读写?假设我们在180天后使数据到期,如果我没有记错,墓碑的比例将是10 / 180~ = 0.056(当10是gc_grace_periods的天数时) .

2 回答

  • 1

    在阅读了@Alex引用我的博客(和评论)后,我得出结论,由于表的 default_time_to_live ,为过期的行创建了墓碑 . 只有在 gc_grace_periods 过去后才会清理那些墓碑 . 见stack overflow question .

    关于我的第一个问题,datastax page描述得非常好 .

  • 0

    在您的情况下,主键等于分区键,因此您有所谓的"skinny"分区,由一行组成 . 如果删除数据,那么代替分区内的数据,你就不会有问题了 . 如果数据已过期,那么它将在压缩期间被删除 - 仅当您明确删除数据时才需要 gc_grace_period isn 't applied here - it' - 我们需要保留逻辑删除,因为如果其他节点无法接收,则可能需要更改"catch up"删除操作 . 您可以在following document中找到有关数据删除的更多详细信息 .

    如果在同一分区中有很多(数千)行,例如,如果使用多个群集键,则会出现逻辑删除问题 . 当删除这些数据时,会生成逻辑删除,当我们读取分区内的数据时应该跳过 .

    附:你有没有看到blog post解释删除是如何发生的?

相关问题