获取时间序列表中的最后一行?

时间:2017-02-22 14:03:50

标签: cassandra cqlsh

我已经能够将时间序列表的最后一行作为:

SELECT * from myapp.locations WHERE organization_id=1 and user_id=15 and date='2017-2-22'  ORDER BY unix_time DESC LIMIT 1;

这很好,但是,我想知道执行ORDER BY的性能和开销,因为行已经排序了,我只是用它来获取最后一行,在我的情况下它是一个开销吗?

如果我不使用ORDER BY,我将始终获得表格中的第一行,因此,我可能会以另一种方式使用INSERT,例如:插入总是在开头而不是表的结尾?

有什么建议吗?我可以使用ORDER BY而不用担心性能吗?

2 个答案:

答案 0 :(得分:1)

只需将您的群集键顺序定义为DESC

即可

与以下架构类似:

CREATE TABLE locations (
    organization_id int,
    user_id int,
    date text,
    unix_time bigint,
    lat double,
    long double,
    PRIMARY KEY ((organization_id, user_id, date), unix_time)
) WITH CLUSTERING ORDER BY (unix_time DESC); 

因此,默认情况下,您的数据将按unix_time desc排序,您无需在查询中指定
现在您可以使用以下查询来获取最后一行:

SELECT * from myapp.locations WHERE organization_id = 1 and user_id = 15 and date = '2017-2-22' LIMIT 1;

答案 1 :(得分:1)

如果该表的查询模式始终为ORDER BY unix_time DESC,那么您处于逆序时间序列方案中,我可以说您的模型不准确(没错)。

没有理由不通过在表格定义中添加WITH CLUSTERING ORDER BY unix_time DESC来按相反的顺序对记录进行排序,而在我看来,ORDER BY unix_time DESC最多只会与某些内容相同对于这些用例(嗯,我认为它会表现更差)。