如何获得Cassandra的尺寸?

时间:2017-03-22 16:29:19

标签: 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     | {}
2             | 13:00     | {}
2             | 14:00     | {2, 4}

当我选择请求时,我希望在某个时间范围内获取特殊组的事件计数。对于时间范围1

,上面的表和ID为13:00 - 15:00的组将是下一个
13:00 - 4
14:00 - 2
15:00 - 0

我可以为时间范围1选择组13:00 - 15:00的所有事件集并计算他们的一面。它可以工作,但事件设置可以足够大,我不需要有关事件ID的信息(我只存储它的唯一性),只有它们的大小。我可以使用CQL在Cassandra端获得套装尺寸吗?

1 个答案:

答案 0 :(得分:0)

不要将数据用于大量数据

  

Collection(Set):collection collection:2B(231);值大小:65535(216-1)(Cassandra 2.1及更高版本,使用本机协议v3)

而是将event_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;

它将返回组中的所有事件。

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