卡桑德拉timeuuid比较

问题描述:

我有一个表,卡桑德拉timeuuid比较

CREATE TABLE log (
    uuid uuid, 
    time timeuuid, 
    user text, 
    .... 
    PRIMARY KEY (uuid, time, user) 
) 

创建日志(时间)CUSTOM INDEX time_idx USING 'org.apache.cassandra.index.sasi.SASIIndex';

然后我想在时间选择基

SELECT * FROM登录其中时间> 84bfd880-b001-11e6-918c-24eda6ab1677;

并且什么也没有返回,如果我使用equal(=),它将返回。我哪一步出错了?

您需要将time_idx索引设置为SPARSE索引。

SPARSE索引旨在提高查询每毫秒插入数据的大型密集数字范围(如时间戳)的性能。如果数据是数字,则使用少量分区键的数百万列值将表征数据,范围查询将针对索引执行,然后SPARSE是最佳选择。对于不符合此标准的数字数据,PREFIX是最佳选择。

降time_idx,并与下面的查询

CREATE CUSTOM INDEX time_idx on Log(time) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = { 'mode': 'SPARSE' }; 

创建现在你可以用一个不等式> =,>和< =查询。

限制:SPARSE索引仅用于数字数据,所以LIKE查询不适用。

另一件你的表格创建不正确。它应该是

CREATE TABLE log (
    uuid uuid, 
    time timeuuid, 
    user text, 
    PRIMARY KEY (uuid, time, user) 
) 
+0

感谢您的回复,但我看到了这个**关于SPARSE模式有一个重要说明。由于稀疏,这意味着对于每个索引值,只有极少数(实际上最多5个)匹配行。如果有超过5个匹配的行,则会抛出异常**对于我的情况,可以返回多于5行吗? – Schmidt

+0

在我看来,时间是一个高基数列 >高基数是指值非常不常见或唯一的列。高基数列值通常是标识号,电子邮件地址或用户名。具有高基数的数据表列的示例是具有名为USER_ID的列的USERS表。 如果是高基数列,那么你应该使用稀疏 –