如何在cassandra的长行中获得最后一行“行”

时间:2014-10-02 04:28:10

标签: cassandra-2.0 cql3 datastax cqlsh

在Cassandra中,行可以很长并存储时间单位的相关数据。例如,一行可能如下所示:

RowKey: "weather"
name=2013-01-02:temperature, value=90, 
name=2013-01-02:humidity, value=23, 
name=2013-01-02:rain, value=false",
name=2013-01-03:temperature, value=91, 
name=2013-01-03:humidity, value=24, 
name=2013-01-03:rain, value=false",
name=2013-01-04:temperature, value=90, 
name=2013-01-04:humidity, value=23, 
name=2013-01-04:rain, value=false".

9列3天的天气信息。 时间是这一行的主键。所以这一行的顺序是基于时间的。

我的问题是,我有什么方法可以进行如下查询:这一行中最后/第一天的湿度值是多少?我知道我可以在CQL中使用Order By语句,但由于此行已经按时间排序,因此应该有一些方法可以直接获取第一个/最后一个,而不是进行另一种排序。或者cassandra已经通过引擎盖下的Order By声明优化了它?

我能想到的另一种方法是,在此行中存储名为“last_time_stamp”的另一列,该列始终在插入新数据时自行更新。但是每次插入新的天气数据时都需要更新一次。

感谢您的任何建议!:)

1 个答案:

答案 0 :(得分:0)

如果没有看到更多的实际表,我建议使用时间戳(或者如果有可能发生冲突的timeuuid)作为复合主键中的第二个组件。使用此方法,您可以通过选择ORDER BY t DESC LIMIT 1来获取最后一行。

您还可以更改架构中的群集顺序,以便为“最后N个”查询自然地进行排序。

请参阅this answer中的示例和关联资源。

相关问题