2017-03-22 8 views
0

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} 

リクエストを選択すると、ある時間範囲内で特別なグループのイベント数を取得したいと考えています。これは、時間範囲13:00 - 15:00のID 1と上記テーブルおよびグループのために次のようになります。

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

Iは、時間範囲13:00 - 15:00のグループ1ための設定すべてのイベントを選択し、それらの側面を計算することができます。それは動作しますが、イベントセットは十分に大きくなる可能性があり、イベントID(私は一意性のためだけに格納します)に関する情報は必要ありません。 CQLを使ってCassandra側にサイズを設定できますか?コレクションサイズ:

答えて

0

は、膨大なデータ

コレクション(セット)のためのコレクションを使用しないでください2B(231);値のサイズ:65535(216-1)(カサンドラ2.1以降では、ネイティブプロトコルV3を使用して)

代わりに主キーでのevent_id置きます。

​​

あなたはこの1のようにデータを挿入することができます

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

をそして、あなたはこの1のように問い合わせることができます:

SELECT * FROM events WHERE group_id = 1; 

それは、グループ内のすべてのイベントを返します。

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

カウントでグループを検索するには、スパークまたは書き込みプログラムを使用します。

またはこれらのクエリのいずれかを使用してカウントを取得します。

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

関連する問題