cassandra - 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 的巨大数据在内存中执行。
解决方案
您的计数查询正在执行全表扫描。这就是超时的原因。您需要使用分区/集群键删除数据。
推荐阅读
- c# - 如何使用 FulltrustProcessLauncher 执行 powershell 命令
- gradle - 在根项目“gradle-tutorial”中找不到路径为“:projectA”的项目
- sql - 使用 UNION 动态循环/加入结果
- c# - 结合 2 个 .csv 文件以及按日期对不同时间格式的内容进行排序
- ssas - DAX 计算列使用 IF 来评估另一个表中的值
- r - 从多个不同的表中转置数据框上的列
- sql - 今天日期的 SQL IF 语句
- javascript - 如何将多个动态事件监听器包装成一个?
- javascript - 错误:无法获取未定义或空引用的属性“_ScriptLoaderTask”
- perl - 检查错误值时,while循环将找不到正则表达式