Database design cassandra中的数据建模和查询

Database design cassandra中的数据建模和查询,database-design,cql,cassandra-2.0,nosql,Database Design,Cql,Cassandra 2.0,Nosql,我在卡桑德拉有这张桌子。从这个表中,我需要提取两个表,一个包含对应于ID的第一个事件,另一个包含对应于ID的最后一个事件。因此,我应该得到两个表作为我的输出: |ID| Events Timestamp ---------------------------------------------- |1 | InProgress 2010-03-31 15:59:42 |1 | Awaiting 201

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

   |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         

我需要知道如何仅在cqlcassandra查询语言中实现这一点,或者是否有一种方法可以对我的数据进行建模,从而能够获得所需的结果。

您可以使用如下模式:

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

   final
   -----------------------------  
   Closed              
这将允许您按id提取,按时间戳asc或desc排序,并限制为1

但是,请检查每个id的预期事件数。如果对于超过100MB的id来说,所有事件都足够了,那么您需要开始考虑bucketing或其他方法


另一种方法是使用Spark进行分析查询,并将结果存储在一个表中,该表以您想要的格式保存结果。这确实意味着定期运行外部作业或spark streaming应用程序,这将比实时数据晚几秒到几分钟,但它会工作。

@ashic我的问题是我总共有7554个id。那么,每次我需要在cql shell中手动获取第一个和最后一个事件时,我是否必须给出id的值,或者是否有一种方法可以让我编写一个查询并获取一个包含每个id对应的第一个事件的表和一个包含每个id对应的最后一个事件的表,而不在7400 id的WHERE子句中指定id,您可以创建一个像create table statshard int、id int、map minmax、primary key dummy、id这样的表。但是要小心……所有的行都将在同一个分区中,因此如果这一情况增加,您将需要创建新的分片,并查询两个分片以获得值。另一方面,为什么需要返回7K行?这有用吗?是否可以用另一种方式来解决业务实际需要的是什么??我建议使用shard方法,因为查询将快速命中一个分区。查询所有节点会对性能造成影响&可能会超时。
create table event(
    id int,
    ts timestamp,
    desc text,
    primary key (id, ts)
);