我们有一个简单的表,我们想要计算特定行中包含的列数。
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;
答案 0 :(得分:1)
主要原因是Cassandra不是为那种请求而设计的。当您进行这样的调用(必须扫描所有分区范围)时,请求很可能会在足够大的数据大小上超时。因为这个CQLSH和现在的DevCenter都内置了限制器来停止查询,这可能需要很长时间(比如count(*))。虽然您可以使用限制999999999作为解决方法,但是当数据库中有足够的数据时,这仍然会超时。
如果您确实想知道有多少行(或一般计算任何内容),最好使用计数器列。然后,您可以让应用程序在添加新rode时递增计数器,并在删除行时递减。