cassandra ScyllaDB count(*)返回差值结果

rpppsulh  于 12个月前  发布在  Cassandra
关注(0)|答案(2)|浏览(207)

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

SELECT COUNT(*) 
FROM tabledata;

字符串

  • 第一次运行返回5732行的结果
  • 第二次运行返回5432行的结果

总是不同的结果。
有什么建议可以教你如何在scylla中计算行数吗?

mpbci0fu

mpbci0fu1#

一致性水平?
(you可以在互联网上找到一个非常有趣的关于最终一致性的图片)
如果RF=3
如果您使用_QUORUM写入所有行,
然后我会设置CONSISTENCY_QUORUM
并将伯爵
如果不确定是否正确完成了所有写入操作,请使用CL ALL
另一种选择是运行完全修复并重新计数
同样,你的表可能有TTL,在这种情况下,每次都有不同的计数是预期的(如果你写它可能会更大,如果你只是读,那么它会更小)
为了实现有效的计数,请查看https://github.com/scylladb/scylla-code-samples/tree/master/efficient_full_table_scan_example_code-但同样适用于re一致性级别(当然,此脚本将通过超时错误告诉您无法查询令牌范围,这意味着节点/分片因其他流量而过载,默认情况下不会重试,这是一个简单的脚本)

7kqas0il

7kqas0il2#

您遇到的问题是任何分布式行存储(Cassandra或Scylla)中固有的问题。为了使其工作,协调器节点需要联系所有其他节点,查询它们,并组装结果集。这会导致大量争用,可能会阻止某些副本正确报告。
我推荐(下载)使用DSBulk进行这种类型的操作。它有一个专门为此目的设计的count功能。

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

字符串

相关问题