【问题标题】:Cassandra Read time out on performing query in order to mass deleteCassandra 在执行查询时读取超时以进行批量删除
【发布时间】:2020-02-06 12:29:19
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: cassandra cassandra-2.0 cassandra-3.0 tombstoning tombstone


    【解决方案1】:

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

    【讨论】:

    • 我们没有任何其他来源来获取我们必须删除的标识符,首先我们必须读取所有数据,然后删除它然后进行操作。我们读取 cassendra 的标准应该是什么。
    • 那你的表结构不对,这就是你遇到这个问题的原因。
    • 更新表结构有问题。
    • 您可以添加一个表来存储订阅者的已知 profile_ID。然后迭代:从表中选择subscriber_id =a 和profile_id=b 和timestamp
    • 这可能会导致我们 10M 的选择查询。有什么办法可以缓解它。
    猜你喜欢
    • 2015-08-25
    • 1970-01-01
    • 2019-03-25
    • 2022-08-14
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    相关资源
    最近更新 更多