2014-10-06 90 views
0

我是新來卡桑德拉但我已經看到節儉的例子早在那裏我可以爲列模式:如何在Cassandra中使用時間序列數據模型?

id | start_time | end_time | total_value | value + [timeStamp1] 
| value + [timeStamp2]... 

是否有可能與單個列的家庭與CQL做到這一點?我可以看到我可以創建(id,timestamp)的組合鍵並將值存儲在時間戳中,並將每行的事件級別元數據作爲非規範化的一部分重複使用,但仍然會將其存儲在一個大行中?

回答

2

是的,你可以在只有一張桌子的卡桑德拉做到這一點。這個想法是你有一個分區密鑰(id)和一個集羣密鑰(時間戳)。對於同一分區鍵的所有數據寫入到一個大排...

CREATE TABLE timeseries (id uuid, ts timestamp, info text, otherinfo text, PRIMARY KEY (id, ts)); 

在這個例子中,你可以按時間查詢特定ID的所有時間戳事件。

SELECT * FROM timeseries where id=someid and ts > 0 and ts < 100; 

對於每個ID,您將有一個包含事件的寬行。至於「重複事件元數據爲非規範化」,如果對於相同的ID,所有其他信息不會改變,那麼您應該聲明這些爲static,因此,無論您在ROW內有多少個事件,這些列只會存在一次(這是一個聰明的非規範化)。

HTH, 卡羅

+0

將不在這裏的主鍵原因的問題使用'ts'的?你的示例表似乎每行包含一個時間戳,這意味着所有值的新行,但OP似乎想要一個很寬的行,在這種情況下,列本身應該是時間戳,以便範圍在一行之後尋找工作ID被識別。 – ely 2014-10-06 12:56:12

+0

太棒了!靜態關鍵字是我錯過了。 – samyem 2014-10-06 12:56:38

+0

@EMS在我的例子中我使用了一個很寬的行:寬行的分區是id鍵 - 它不是每行一個時間戳,你可以有很多時間戳記爲相同的ID,並將全部位於相同的分區(寬行)。這是因爲主鍵是由分區鍵和集羣鍵 - 看看http://stackoverflow.com/questions/24949676 – 2014-10-06 13:03:36

相關問題