cassandra中的数据建模和查询

问题描述:

|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   

我在卡桑德拉有这张表。从这个表我需要提取含有相应的ID和其他含有相应于id.Thus最后一个事件的第一个事件两个表,一个,我应该得到两个表我的输出:cassandra中的数据建模和查询

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

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

我需要知道如何能在这个CQL (Cassandra的查询语言)仅或者如果存在我可以在我能够获得期望的结果这样的方式进行建模我的数据的方式来完成。

你可以使用类似的模式:

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

这将允许您通过ID和顺序由时间戳(ASC或DESC),并限制取为1

然而,检查有多少事件每个ID你期望。如果它足以让一个超过100MB的ID的所有事件,你将需要开始考虑bucketing或其他方法。

另一种方法是使用星火做分析查询和结果存储在该持有它正是你想要的格式的表格。这确实意味着定期运行一个外部工作(或者一个火花流应用程序,它将在实时数据后面几秒到几分钟),但它可以工作。

+0

@ ashic,我的问题是,我总共有7554点的ID。所以,我必须给ID每次我需要获得第一和最后一个事件,手动在CQL壳的价值,或者是没有办法,我写一个查询,并得到一个表contaning对应于每个ID一号事件的方式和包含对应于每一个ID,而无需在WHERE子句 – 2014-12-02 11:19:50

+0

在指定的ID为7400点的id的最后一个事件的表,则可以创建一个表,例如建立表统计数据(碎片INT,ID INT,地图最小最大,主键( dummy,id))。不过要小心......所有行会在同一个分区,所以如果增加,则需要创建新的碎片,以及查询的两个碎片得到的值。在另一张纸条上,为什么你需要返回7K行?这有用吗?它可以以不同的方式解决(是业务实际需要的?)?我建议使用分片方法,因为查询会很快(击中一个分区)。查询所有节点对于性能和可能的超时会很糟糕。 – ashic 2014-12-02 12:49:50