Cassandra查询性能,范围

时间:2015-06-03 16:33:12

标签: cassandra cassandra-2.0 cqlsh

我对Cassandra很新,我想知道如果询问" date =' 2015-01-01'&是否会对性能产生任何影响#34;或者"日期> =' 2015-01-01' AND date< =' 2015-01-01'"。

我想要使用这样的范围的唯一原因是因为我需要进行多个查询,并且我想要准备它们(如在预准备语句中)。这样,准备好的报表编号减半。

在我要使用的两个表中使用的键是((key1,key2),date)和(key1,date,key2)。第一个表的查询类似于:

SELECT * FROM table1
WHERE key1 = val1
    AND key2 = val2
    AND date >= date1 AND date <= date2

1 个答案:

答案 0 :(得分:1)

对于PRIMARY KEY (key1, date, key2)这种类型的查询是不可能的。如果你这样做,你会看到如下错误:

  

InvalidRequest:code = 2200 [无效查询] message =“PRIMARY KEY列   “key2”不能被限制(前一栏“日期”不是   限制或非EQ关系)“

如果前面的列被除了equals运算符之外的任何其他列过滤,Cassandra将不允许您通过PRIMARY KEY组件进行过滤。

另一方面,您对PRIMARY KEY ((key1, key2), date)的查询可以正常运行。原因是,Cassandra使用聚类键(在本例中为date)来指定分区内数据的磁盘排序顺序。在指定分区键(key1key2)时,结果集将按date排序,从而允许Cassandra通过从磁盘执行连续读取来满足您的查询。

为了测试一下,我甚至会在一张带有类似密钥的桌子上运行两个查询,然后打开tracing

SELECT * FROM log_date2 WHERe userid=1001 
AND time > 32671010-f588-11e4-ade7-21b264d4c94d 
AND time < a3e1f750-f588-11e4-ade7-21b264d4c94d;

返回1行并在4068微秒内完成。

SELECT * FROM log_date2 WHERe userid=1001 
AND time=74ad4f70-f588-11e4-ade7-21b264d4c94d;

返回1行并在4001微秒内完成。