cassandra

时间:2015-07-23 23:08:47

标签: cassandra database-schema

我需要在某个城市按时间顺序查找排名靠前的照片。我提出了以下架构

create table top_picture(
    picture_id uuid,
    city text,
    rank int,
    date timestamp,
    primary key (city,date,rank)
) with CLUSTERING ORDER BY (date desc,rank desc);

通过执行以下查询

,确实在一定程度上解决了问题(除了重复)
select * from top_picture where city='san diego';

。但是如果在同一天插入相同的picture_id,那么我会得到重复的条目,因为picture_id不是分区键的一部分。但是我不能将它添加到分区键,因为那时我将不能像上面那样进行简单的选择查询,因为我需要为picture_id提供选择查询,它不会为城市提供最佳图片。

之前是否有人遇到过这种类型的架构或其他任何建议的方法。

1 个答案:

答案 0 :(得分:1)

听起来你想要两个数据视图。在一个视图中,您希望获得排名靠前的图片,而在另一个视图中,您希望picture_id是唯一的。

所以你可以有两个表,一个表有picture_id作为主键,另一个表示你已经显示。

当您要插入图片时,首先尝试使用insert语句中的IF NOT EXISTS子句将其插入到picture_id表中。如果该插入失败,则它是重复的,您不会将其插入top_picture表。

在Cassandra 3.0中,可以支持这样的物化视图,但是现在你必须在应用程序代码中管理这两个表。