Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 如何获得卡桑德拉设置的大小?_Cassandra - Fatal编程技术网

Cassandra 如何获得卡桑德拉设置的大小?

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

我想在卡桑德拉存储一些事件的信息。事件具有不同的组,并且还按时间间隔组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     | {}
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.
资料来源: