2015-05-07 61 views
2

我正在研究如何將日誌存儲到卡桑德拉。
日誌的模式是這樣的。使用卡桑德拉時間序列數據

編輯:我已經改變了架構,以便作出一些澄清。

CREATE TABLE log_date (
    userid bigint, 
    time timeuuid, 
    reason text, 
    item text, 
    price int, 
    count int, 
    PRIMARY KEY ((userid), time) - #1 
    PRIMARY KEY ((userid), time, reason, item, price, count) - #2 
); 

每天都會創建一個新表格。 所以一張表只包含一天的日誌。

我的查詢條件如下。
在特定日期(日期不是時間)查詢特定用戶的所有日誌。
所以,原因,項目,價格,數量將不會被用作提示或查詢條件。

我的問題是哪個PRIMARY KEY設計更適合。
編輯:這裏的關鍵是我想以原理方式存儲日誌。

如果我選擇#1,那麼每個日誌會創建很多列。每個日誌有更多值的可能性非常高。上面的模式只是一個例子。日誌可以包含像subreason,friendid等值。

如果我選擇#2,每個日誌將創建一個(非常)複合列,到目前爲止,我找不到任何關於複合列開銷的有價值信息。

我應該選擇哪一個?請幫忙。

+0

DIFF鍵之間:HTTP://計算器。com/questions/24949676 /區分分區鍵複合鍵和聚類鍵中的卡桑德拉 –

回答

16

我的建議是,你的兩個選項似乎都不適合你的時間序列,你每天創建一個表的事實似乎也不是最優的。

相反,我建議你創建的用戶名和天單表和分區和使用時間的UUID作爲該事件的簇狀,這樣的例子看起來像:

CREATE TABLE log_per_day (
    userid bigint, 
    date text, 
    time timeuuid, 
    value text, 
     PRIMARY KEY ((userid, date), time) 
) 

這將允許您在一天內將所有事件放在一行中,並允許您爲每個用戶每天執行一次查詢。

通過聲明time集羣列允許有一個很寬的行,您可以根據需要在一天中插入許多事件。

因此,行鍵是文本中的用戶ID和正文日期的composite key,例如,

insert into log_per_day (userid, date, time, value) values (1000,'2015-05-06',aTimeUUID1,'my value')

insert into log_per_day (userid, date, time, value) values (1000,'2015-05-06',aTimeUUID2,'my value2')

上面的兩個刀片將在同一行中,因此,你將能夠在一個單一的查詢閱讀。

此外,如果你想了解更多時序信息,我強烈建議你檢查Getting Started with Time Series Data Modeling

希望它能幫助,

何塞·路易斯·

+0

謝謝,但我的問題不是關於分區或集羣的關鍵部分,而是關於存儲日誌的其餘部分以示意的方式。 –

+0

我同意@jbarrueta的分區/集羣。 關於剩餘日誌數據的存儲, 因爲它可以是可變的,所以您有兩種可能的方法: 1.用於存儲爲鍵值對的地圖數據類型 2.數據作爲以文本數據類型格式存儲的json。 P.S. :第二種方法對內存要求很輕。 – ininprsr