2014-10-02 40 views
1

」在Cassandra中,一行可能非常長,並存儲時間單位的相關數據。例如,一行可能如下所示:如何獲取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」的數據,該數據總是在插入新數據時進行更新。但是,每次插入新的天氣數據時都需要更新一次。

感謝您的任何建議!:)

回答

0

沒有看到更多實際的表,我建議使用一個時間戳(或timeuuid如果是衝突的可能性)作爲一個複合主鍵的第二個組成部分。使用這個,你可以通過選擇ORDER BY t DESC LIMIT 1來得到最後的「行」。

你也可以改變模式中的聚類順序,以便爲「最後N個」查詢自然地排序。

請參閱示例和鏈接資源this answer

相關問題