设计cassandra的时间序列架构

时间:2015-03-27 20:29:52

标签: cassandra

我的应用程序希望以降序方式显示上传一天的照片。

我查看了cassandra的气象站示例,其中我获取了特定站的时间序列数据。在我的情况下,我想跟踪系统中存在的所有照片。我设计了如下的架构:

create table if not exists photos(
photo_id uuid,
category text,
owner uuid,
date text,
created timestamp,
primary key((date),created)
)WITH CLUSTERING ORDER BY (created DESC);

此处dateMM/DD/YYYY日期的created字符串表示。

这里的问题是当我根据created日期选择我想要的最新照片时。我以随机顺序返回行(如果它们具有相同的日期,它们将以desc顺序排序)。我选择时想要获取最新日期的行。

2 个答案:

答案 0 :(得分:2)

  

这里的问题是当我根据创建的日期选择我想要的最新照片时。我以随机顺序返回行

实际上,它们按分区键(date)的散列值排序。 Cassandra只能在分区键中维护的群集顺序。这就是为什么具有相同created的行被排序"如果它们具有相同的日期。"

  

我想在选择时获取最新日期的行。

可以这样做。您需要做的就是在执行此操作时指定日期。

SELECT * FROM photos WHERE date='03/28/2015';

通过限制分区键,您的行将以其定义的群集顺序返回。从您的应用程序或报告级别来看,生成当前日期不应该太难。

此外,不是为了自我推销,但本月早些时候,星球Cassandra发表了一篇关于这个主题的文章(很大程度上是基于我在这个网站上回答的问题):We Shall Have Order!给它一个阅读它应该帮助你解决这些类型的问题。

答案 1 :(得分:0)

请在选择操作中尝试“排序依据”。它将按日期显示数据

  

下面的示例按升序显示基于创建日期的照片值。

cqlsh:temp> SELECT * FROM photos WHERE created in (1427524795784,1427524795899) and date = 'march-28'  ORDER BY created ASC ;


 date     | created                  | category | owner                                | photo_id
----------+--------------------------+----------+--------------------------------------+--------------------------------------

 march-28 | 2015-03-28 10:39:55+0400 |   nature | 007aa9b5-c86b-4805-a65d-6019d1ba820b | 007aa9b5-c86b-4805-a65d-6019d1ba820b
 march-28 | 2015-03-28 10:39:55+0400 |   nature | 007aa9b5-c86b-4805-a65d-6019d1ba820b | 007aa9b5-c86b-4805-a65d-6019d1ba820b