【问题标题】:Count columns in Cassandra在 Cassandra 中计算列数
【发布时间】:2019-10-07 10:27:03
【问题描述】:

我们有一个简单的表,我们想计算特定行中包含的列数。

CREATE TABLE ourkeyspace.usersession (
  date text,
  time timeuuid,
  encryptedtrackerid text,
  PRIMARY KEY (date, time)
) WITH CLUSTERING ORDER BY (time ASC) AND
  compaction={'class': 'SizeTieredCompactionStrategy'} AND
  compression={'sstable_compression': 'SnappyCompressor'}

我的问题是,如果我计算列,为什么我需要在查询上设置 LIMIT?

SELECT COUNT(*) FROM usersession WHERE date = '22-10-2013' LIMIT 99999999;

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    主要原因是 Cassandra 不是为这种请求而设计的。当您进行这样的调用(必须扫描所有分区范围)时,请求很可能会在足够大的数据大小上超时。由于这个 CQLSH 和现在的 DevCenter 都内置了限制器来停止可能需要很长时间的查询(如 count(*))。虽然您可以使用限制 999999999 作为解决方法,但当数据库中有足够的数据时,它仍然会超时。

    如果您真的想知道有多少行(或一般计算任何内容),最好使用计数器列。然后,您可以让您的应用程序在添加新行时增加计数器,并在删除行时减少计数器。

    【讨论】:

    • 但是如果我有一个聚集键并且我正在搜索那个特定的行,我的所有列都在同一个分区中。为什么我还要设置列数限制?
    • @HenriqueMiranda,卡桑德拉不知道。只是不应该那样使用。实际上,COUNT() 在 Cassandra 中根本不起作用。
    猜你喜欢
    • 1970-01-01
    • 2015-07-25
    • 2020-03-12
    • 2018-04-06
    • 2017-09-23
    • 2014-09-12
    • 2020-01-26
    • 2013-06-08
    • 2012-06-15
    相关资源
    最近更新 更多