2017-03-22 48 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