2017-03-22 81 views
0

我想存儲有關Cassandra的一些事件的信息。事件具有不同的組,並按時間間隔進行分組(組ID =分區鍵,區間=集羣鍵)。事件具有ID,並且在每個組內我只想在該組內存儲具有唯一ID的事件。我想爲它使用集合並將事件ID存儲在它們中。這樣的事情:如何獲得Cassandra套裝尺寸?

group id (PK) | time (CK) | event ids 
1    | 13:00  | {0, 2, 4, 5} 
1    | 14:00  | {1, 3} 
1    | 15:00  | {} 
2    | 13:00  | {} 
2    | 14:00  | {2, 4} 

當我做選擇請求時,我想要在某個時間範圍內獲得特殊組的事件計數。這將是未來對上述表格和組ID 1時間範圍13:00 - 15:00

13:00 - 4 
14:00 - 2 
15:00 - 0 

我可以選擇所有事件設置了組1時間範圍13:00 - 15:00並計算他們的身邊。它會工作,但事件設置可以足夠大,我不需要有關事件ID(我只存儲它的唯一性),只有他們的大小的信息。我可以使用CQL在Cassandra一側獲得套尺寸嗎?

回答

0

不要使用收集海量數據

集(集):集合大小:2B(231);值大小:65535(216-1)(Cassandra 2.1及更高版本,使用本機協議v3)

取而代之的是將event_id放在主鍵中。

​​

你可以像這樣的插入數據:

INSERT INTO events (group_id , time , event_id) VALUES (1, 13, 0); 

而且你可以查詢像這樣的:

SELECT * FROM events WHERE group_id = 1; 

將一組返回的所有事件。

group_id | time | event_id 
----------+------+---------- 
     1 | 13 |  0 
     1 | 13 |  1 
     1 | 14 |  2 

使用Spark或Write程序按計數查找組。

或者使用這些查詢中的任何一個來計數。

SELECT group_id,time,count(*) FROM events WHERE group_id = 1 AND time = 13; // To count in a group and time 
SELECT group_id,time,count(*) FROM events WHERE group_id = 1 AND time >= 13 AND time <= 14; // To count in a group between time 13 to 14. 

來源:https://docs.datastax.com/en/cql/3.1/cql/cql_reference/refLimits.html