计算卡桑德拉的列数

时间:2013-10-23 13:20:40

标签: cassandra cql

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

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? 从usersession中选择count(*),其中date = '22 -10-2013'limit 99999999;

1 个答案:

答案 0 :(得分:1)

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

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