3

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

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;
4

1 回答 1

2

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

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

于 2013-10-23T21:54:47.930 回答