我正在尋找一種將時間特定數據存儲在cassandra中的好方法。在cassandra中存儲時間特定數據
每個條目可以看起來像(start_time, value)
。稍後,我想檢索當前值。
檢索當前值的邏輯如下。
查找與
start_time<=current_time
的所有行。然後從第一步中獲得的行中找到最大值爲
start_time
的值。
PS: - 編輯的問題,使之更加明確
我正在尋找一種將時間特定數據存儲在cassandra中的好方法。在cassandra中存儲時間特定數據
每個條目可以看起來像(start_time, value)
。稍後,我想檢索當前值。
檢索當前值的邏輯如下。
查找與start_time<=current_time
的所有行。
然後從第一步中獲得的行中找到最大值爲start_time
的值。
PS: - 編輯的問題,使之更加明確
創建兩個單獨的表象下面這樣:
CREATE TABLE data (
start_time timestamp,
value int,
PRIMARY KEY(start_time, value)
);
CREATE TABLE current_value (
partition int PRIMARY KEY,
value int
);
現在,你必須將數據插入到兩個表,插入數據進入第二個表格使用像1一樣的靜態值。
INSERT INTO current_value(partition, value) VALUES(1, 10);
現在在當前值表中,您的數據將被置頂,每當您選擇時您將獲得最新值。
如果我輸入未來的時間戳,它會起作用嗎? – Ravi
@Ravi current_value表將保留最後一個插入 –
我認爲在這裏數據表將不允許像start_time <= current_time這樣的查詢。 –
確切的要求是不可能的。但是我們可以用更多的專欄來貼近它。
首先,爲了能夠使用<=
運算符,您的start_time
列需要是表的集羣鍵。
然後,你需要一個不同的分區鍵。您可以選擇一個固定值,但當分區的行數太多時可能會帶來問題。那麼你應該更好地使用諸如start_time
的年份或月份。
CREATE TABLE time_specific_table (
year bigint,
start_time timestamp,
value text,
PRIMARY KEY((year), start_time)
) WITH CLUSTERING ORDER BY (start_time DESC);
的問題是,當你將查詢表,你需要知道分區鍵的值:
找到所有行與START_TIME < = CURRENT_TIME
SELECT * FROM time_specific_table
WHERE year = :year AND start_time <= :time;
選擇最大值start_time
SELECT * FROM time_specific_table
WHERE year = :year LIMIT 1;
這是您要執行的一個查詢嗎?列出您想要執行的所有類型的查詢併爲其建模 –
是的,這是我想要執行的唯一查詢。 – Ravi
你需要以前的所有數據嗎? –