删除时间戳早于给定时间戳的 Cassandra table 个条目

Deletion of Cassandra table entries with timestamp older than given timestamp

我想从 table 请求中删除早于给定时间戳的所有条目。

table 请求的结构:

CREATE TABLE requests (
    request_id uuid,
    request_timestamp timestamp,
    PRIMARY KEY (request_id, request_timestamp)
) WITH CLUSTERING ORDER BY (request_timestamp ASC)

显然以下查询不起作用,因为必须指定主键 request_id:

Delete from Requests where request_timestamp < givenTimestamp;

但是当我有一个包含数百万条目的巨大 table 时,使用带有 IN 子句的查询将不是最佳选择:

Delete from Requests where request_id in (id1, id2.....) and request_timestamp < givenTimestamp;

一个选项是使用 TTL(生存时间),但我们希望保持条目的 TTL 可配置,而使用 TTL 这是不可能的。

还有哪些其他方法可以从 table 中删除旧条目?

谢谢

主要的是,正如您已经写过的,您需要提供分区键来执行此类删除。

假设您想每天删除时间戳小于特定日期的所有请求,为了提高效率,您可以将模型和分区更改为 "day" 而不是 request_id。类似于:

CREATE TABLE requests (
    day timestamp,
    request_id uuid,
    request_timestamp timestamp,
    PRIMARY KEY (day, request_timestamp, request_id)
) WITH CLUSTERING ORDER BY (request_timestamp ASC, request_id ASC)

字段 day 填充了 t运行cation request_timestampday[=仅 24=] 组件(例如 yyyy-mm-dd)。如果您需要从多个期间删除,您将需要 运行 一组并行的 DELETE 查询,每天一个,并且不要使用 IN。您还可以在分区级别而不是单元级别删除,这对读取来说是一个很大的优势。