我们想创建一个带有简单主键的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 回答
在阅读了@Alex引用我的博客(和评论)后,我得出结论,由于表的
default_time_to_live
,为过期的行创建了墓碑 . 只有在gc_grace_periods
过去后才会清理那些墓碑 . 见stack overflow question .关于我的第一个问题,datastax page描述得非常好 .
在您的情况下,主键等于分区键,因此您有所谓的"skinny"分区,由一行组成 . 如果删除数据,那么代替分区内的数据,你就不会有问题了 . 如果数据已过期,那么它将在压缩期间被删除 - 仅当您明确删除数据时才需要
gc_grace_period
isn 't applied here - it' - 我们需要保留逻辑删除,因为如果其他节点无法接收,则可能需要更改"catch up"删除操作 . 您可以在following document中找到有关数据删除的更多详细信息 .如果在同一分区中有很多(数千)行,例如,如果使用多个群集键,则会出现逻辑删除问题 . 当删除这些数据时,会生成逻辑删除,当我们读取分区内的数据时应该跳过 .
附:你有没有看到blog post解释删除是如何发生的?