【问题标题】:ScyllaDB count(*) return difference resultScyllaDB count(*) 返回差值结果
【发布时间】:2022-01-06 05:07:06
【问题描述】:

我有一个关于 scylladb 查询的问题。我想计算表中的行数:

SELECT COUNT(*) 
FROM tabledata;
  • 第一次运行返回 5732 行的结果
  • 第二次运行返回 5432 行的结果

总是不同的结果。

关于如何在 scylla 中计算行数有什么建议吗?

【问题讨论】:

    标签: cassandra scylla


    【解决方案1】:

    一致性级别?

    (你可以在网上找到一张关于最终一致性的非常有趣的图片)

    如果您的 RF=3

    如果您使用 LOCAL_QUORUM 编写所有行

    然后我会设置 CONSISTENCY LOCAL_QUORUM

    然后重新计算

    如果您不确定所有写入是否正确完成,请使用 CL ALL

    另一种选择是运行完整修复并重新运行计数

    此外,您的表可能有 TTL,在这种情况下,每次都需要不同的计数(如果您编写它可能会更大,如果您只是阅读,那么它会更小)

    为了有效计数,请查看https://github.com/scylladb/scylla-code-samples/tree/master/efficient_full_table_scan_example_code - 但同样适用于重新一致性级别(当然,此脚本会告诉您无法查询令牌范围的超时错误,这意味着节点/分片已超载其他流量,默认不重试,是一个简单的脚本)

    【讨论】:

      【解决方案2】:

      您遇到的问题是任何分布式行存储(Cassandra 或 Scylla)中固有的。为了使其工作,协调节点需要联系所有其他节点,查询它们并组装结果集。这会导致很多争用,可能会阻止某些副本正确报告。

      我建议(下载)使用DSBulk 进行此类操作。它有一个专门为此目的设计的count 功能。

      dsbulk count -k ks1 -t table1 -h '10.200.1.3,10.200.1.4'
      

      【讨论】:

      • 只有 5732 行,正如他所报告的那样,我怀疑争用在这里是一个大问题。
      猜你喜欢
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多