在时间序列中获取最后一行



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

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吗?

喜欢以下模式:

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;

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

没有理由不通过在表定义中添加WITH CLUSTERING ORDER BY unix_time DESC来以相反顺序对记录进行排序,我认为ORDER BY unix_time DESC最多会与这些用例明确指出的内容(我认为,我认为它将是明确的表现更糟)。

最新更新