cassandra - ttl設定 - CQL與寬行-如何獲得最新的設置?



cassandra簡介 (1)

使用當前的數據模型,只能通過分區鍵查詢最近的行。 在你的情況下,這是ID

SELECT ID, Title FROM WideData WHERE ID='aaa' LIMIT 1

由於您已按DESCending順序Updated了已Updated的群集順序,因此將返回具有最新Updated時間戳的行。

給出你想要的結果,我會繼續,並假設你不想單獨查詢每個分區鍵。 Cassandra只能通過分區鍵維護CQL結果集的順序。 另外Cassandra不支持聚合。 所以實際上沒有辦法一次獲得所有ID的“最新”,也沒有辦法得到每個ID有多少更新的報告。

借助Cassandra數據建模,您需要構建適合您查詢的表格。 查詢“計劃”並不是Cassandra的強項(正如你所發現的那樣)。 要通過ID獲取最新的更新,您需要構建一個額外的查詢表,旨在僅存儲每個ID的最新更新。 同樣,要獲得每個ID的更新計數,您可以使用計數器庫存創建一個附加查詢表以適應該查詢。

TL;博士

在Cassandra中,非規範化和冗餘數據存儲是關鍵。 對於某些應用程序,您可能有一個表,您需要支持每個查詢...沒關係。

https://code.i-harness.com

我如何編寫CQL以獲取每行最新的一組數據?

我正在調查從MSSQL到Cassandra的過渡,並開始把握這些概念。 很多研究都有很大的幫助,但是我還沒有找到答案(我知道必須有辦法):

CREATE TABLE WideData {
 ID text,
 Updated timestamp,
 Title text,
 ReportData text,
 PRIMARY KEY (ID, Updated)
} WITH CLUSTERING ORDER (Updated DESC) 

INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES ('aaa', NOW, 'Title', 'Blah blah blah blah')
INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES ('bbb', NOW, 'Title', 'Blah blah blah blah')

等待1分鐘:

INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES ('bbb', NOW, 'Title 2', 'Blah blah blah blah')

等3分鐘:

INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES ('aaa', NOW, 'Title 2', 'Blah blah blah blah')

等5分鐘:

INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES ('aaa', NOW, 'Title 3', 'Blah blah blah blah')

我如何編寫CQL以獲取每行最新的一組數據?

SELECT ID,標題從WideRow - 給我5行,因為它為我的樞軸數據。

基本上我想要的結果(SELECT ID,標題從WideRow WHERE .....)是:

ID   Title
aaa, Title3
bbb, Title2

另外,有沒有一種方法可以獲得一個寬行數據集的數量?

基本上相當於TSQL:SELECT ID,Count(*)FROM表GROUP BY ID

ID   Count
aaa  3
bbb  2

謝謝

此外,任何引用來了解更多關於這些類型的查詢也將不勝感激。