左右的時間內每個元素最新的入門,我有一個卡桑德拉CQL聲明,看起來像這樣:卡桑德拉獲得包含在條款
SELECT * FROM DATA WHERE APPLICATION_ID = ? AND PARTNER_ID = ? AND LOCATION_ID = ? AND DEVICE_ID = ? AND DATA_SCHEMA = ?
此表由一個時間戳列進行排序。
該功能由REST API控制,並且可以指定其中一個篩選參數以獲取最近的行,然後在CQL語句的末尾添加「LIMIT 1」,因爲它是由時間戳列按降序排列。我想要做的是讓他們指定多個設備ID來獲取最新的條目。所以,我的問題是,有沒有辦法做這樣的事情在卡桑德拉:
SELECT * FROM DATA WHERE APPLICATION_ID = ? AND PARTNER_ID = ? AND LOCATION_ID = ? AND DEVICE_ID IN ? AND DATA_SCHEMA = ?
,仍然使用類似「LIMIT 1」只拿回了最新的行中每一個設備ID?或者,我是否只需要爲每個設備執行一個單獨的CQL語句就可以獲得每個設備的最新行?
FWIW,該表的複合鍵是這樣的:當有很多的它和它使請求數到多個分區反正引擎蓋下的參數,不建議
PRIMARY KEY ((application_id, partner_id, location_id, device_id, data_schema), activity_timestamp)
) WITH CLUSTERING ORDER BY (activity_timestamp DESC);
謝謝領域!這幾乎是我想的,但我對Cassandra來說還是個新手,所以只是想確保我沒有錯過任何東西。我已經對另外一個跟蹤其他東西的表進行了額外的寫入操作,所以如果只有一個只記錄最新條目的表,可能不會有什麼大不了的。我認爲這將有助於提高性能,而且性能肯定比它將消耗的一點點空間更重要:) – cloudwalker
好吧,那麼你們都很好;那麼這個項目看起來非常有趣:)哦,什麼是頻率與設備寫入。考慮使用bucketing,如果它是更經常寫的東西,讓我們說每隔幾秒鐘或更多時間我可以給出一些建議;)只是說頻率 –
我必須看看 - 我沒有聽說過bucketing。寫入頻率當前每個「容器」每5秒鐘一次,並且容器的數量有望繼續快速增長,因此每5秒會有x次寫入,這可能是一大堆。 – cloudwalker