Cassandra 如何获得卡桑德拉设置的大小?
我想在卡桑德拉存储一些事件的信息。事件具有不同的组,并且还按时间间隔组id=分区键、间隔=群集键进行分组。事件具有id,在每个组中,我只想在此组中存储具有唯一id的事件。我认为应该使用集合并在其中存储事件id。大概是这样的:Cassandra 如何获得卡桑德拉设置的大小?,cassandra,Cassandra,我想在卡桑德拉存储一些事件的信息。事件具有不同的组,并且还按时间间隔组id=分区键、间隔=群集键进行分组。事件具有id,在每个组中,我只想在此组中存储具有唯一id的事件。我认为应该使用集合并在其中存储事件id。大概是这样的: group id (PK) | time (CK) | event ids 1 | 13:00 | {0, 2, 4, 5} 1 | 14:00 | {1, 3} 1 | 15:00
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-15:00的组1的所有事件集,并计算它们的边。它可以工作,但事件集可以足够大,我不需要关于事件ID的信息,我存储它只是为了唯一性,只是为了它们的大小。我可以使用CQL在Cassandra端获取集合大小吗?不要使用大数据收集
集合集:集合大小:2B 231;值大小:65535 216-1 Cassandra 2.1及更高版本,使用本机协议v3
而是将事件id放在主键中
CREATE TABLE events(
group_id bigint,
time bigint,
event_id bigint,
PRIMARY KEY(group_id,time,event_id)
);
您可以像这样插入数据:
INSERT INTO events (group_id , time , event_id ) VALUES ( 1, 13, 0);
SELECT * FROM events WHERE group_id = 1;
您可以这样查询:
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.
资料来源: