cassandra中的数据建模和查询

时间:2014-12-02 10:42:51

标签: database-design cql cassandra-2.0 nosql

   |ID|        Events        Timestamp  
   ----------------------------------------------
   |1 |       InProgress    2010-03-31 15:59:42
   |1 |       Awaiting      2010-04-31 15:59:42   
   |1 |       Resolved      2010-05-31 15:59:42
   |1 |       Closed        2010-06-31 15:59:42       
   |2 |       Awaiting      2010-07-31 15:59:42 
   |2 |       InProgress    2010-08-31 15:59:42   
   |2 |       Wait          2010-09-31 15:59:42         
   |2 |       Closed        2010-10-31 15:59:42         

我在Cassandra有这张桌子。从这个表我需要提取两个表 - 一个包含对应于ID的第一个事件,另一个包含对应于id的最后一个事件。因此,我应该得到两个表作为我的输出:

    initial      
   -----------------------------   
   InProgress              
   Awaiting       

   final
   -----------------------------  
   Closed              

我需要知道如何才能在 cql(cassandra查询语言)中完成此操作,或者如果有一种我能够以这样的方式建模我的数据的方式能够获得理想的结果

1 个答案:

答案 0 :(得分:0)

您可以使用以下架构:

create table event(
    id int,
    ts timestamp,
    desc text,
    primary key (id, ts)
);

这将允许您按时间戳(asc或desc)按id和顺序获取并限制为1.

但是,请检查您预期的每个ID的事件数。如果它足以让所有事件的ID超过100MB,您将需要开始考虑分组或其他方法。

另一种方法是使用Spark来执行分析查询,并将结果存储在一个表中,该表以您想要的格式保存它。这意味着定期运行一个外部工作(或者一个火花流应用程序,它将在实时数据后面几秒到几分钟),但它会起作用。