删除时间戳早于给定时间戳的 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_timestamp
到 day[=仅 24=] 组件(例如 yyyy-mm-dd
)。如果您需要从多个期间删除,您将需要 运行 一组并行的 DELETE 查询,每天一个,并且不要使用 IN
。您还可以在分区级别而不是单元级别删除,这对读取来说是一个很大的优势。
我想从 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_timestamp
到 day[=仅 24=] 组件(例如 yyyy-mm-dd
)。如果您需要从多个期间删除,您将需要 运行 一组并行的 DELETE 查询,每天一个,并且不要使用 IN
。您还可以在分区级别而不是单元级别删除,这对读取来说是一个很大的优势。