【问题标题】:cassandra cqlsh giving wrong countscassandra cqlsh 给出错误的计数
【发布时间】:2016-01-14 16:34:21
【问题描述】:

我在 cassandra 中有一张只有 2 列和 16 行的表。当我做一个

select * from <table name>

我只能看到 15 行。 当我做一个

select count(*) from <table name> 

我算 15 我正在 cqlsh 中编写这些查询 缺少 1 行,但如果我执行 select * from where appname = '' 之类的操作,我会得到该行。

当我使用 nodejs casandra 驱动程序做同样的事情时,我得到正确的结果为 16。 这里可能是什么问题。我也做了 nodetool flush 但同样的结果 我正在使用 cassandra 2.18

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    这可能是一致性级别的问题。要使用的读取一致性级别取决于复制因子和写入一致性级别。

    您可以在datastax documentation 上找到有关一致性级别的更多信息。

    要快速解决您的问题,您可以在 cqlsh 上尝试:

    CONSISTENCY ALL
    SELECT count(*) ON <table name>
    

    【讨论】:

    • cqlsh 是我问的一个客户,所以它应该根据驱动程序给我数据,对吧?
    • Cqlsh 是一个客户端,因此它的行为类似于驱动程序。但是你说它应该提供相同的数据并不完全正确。原因是Eventual Consistency。两个相同的查询可以为您提供不同的数据,具体取决于查询的节点、CL 和更新的数据量。如果你是初学者,你应该在写作和阅读中使用 QUORUM,这样你就不用太在意一致性了。 Cqlsh 默认一致性级别为 ONE(低)。您知道您的驱动程序一致性级别是多少吗?
    • 这是一个很棒的解释。我查看了链接并了解它是什么。我正在使用来自 datastax 的 cassandra 的 Nodejs 连接器,并使用默认的一致性级别,即 ONE 本身。可能他们正在查询不同的机器。
    猜你喜欢
    • 2015-10-20
    • 2013-10-06
    • 2017-12-29
    • 2018-01-05
    • 2013-10-17
    • 2017-09-13
    • 2020-01-13
    • 2014-02-07
    • 2020-01-30
    相关资源
    最近更新 更多