首页 > 解决方案 > Cassandra 在执行查询时读取超时以进行批量删除

问题描述

我有三个节点的 Cassandra 集群。我想对每个节点中包含大约 1 TB 数据的特定表执行清理任务。

表结构

表包含多行带有 date_created(timestamp) 的订阅者,我想清除所有最新条目 (date_created) 早于 7 天的订阅者行。

例如 - 在附加的上述数据示例中,我们必须删除订阅者 2 的所有行,而如果在 2019 年 12 月 10 日运行,订阅者 2 的所有行都将被保留。

我们有大约 10 M 的订阅者,为了获得记录总数,选择 count(*) 查询抛出异常

ReadTimeout:来自服务器的错误:代码 = 1200 [协调节点超时等待副本节点的响应]消息 =“操作超时 - 仅收到 0 个响应。” info={'received_responses': 0, 'required_responses': 1, '一致性': 'ONE'}

我应该使用什么方法来读取 Cassandra,因为这不能作为 3 TB 的巨大数据在内存中执行。

标签: cassandracassandra-2.0cassandra-3.0tombstoningtombstone

解决方案


您的计数查询正在执行全表扫描。这就是超时的原因。您需要使用分区/集群键删除数据。


推荐阅读