Cassandra timeuuid比较

时间:2016-11-21 08:16:35

标签: cassandra cql timeuuid

我有一张桌子,

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

  

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

然后我想根据时间选择

  

从日志中选择*时间> 84bfd880-b001-11e6-918c-24eda6ab1677;

并且没有任何返回,如果我使用相等(=),它将返回。我哪一步出错?

1 个答案:

答案 0 :(得分:0)

您需要将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)
)