2016-05-16 288 views
0

某些查询我创建的数据库“电影”三名族:在卡桑德拉

CREATE TABLE movies (
    movie_id int primary key, 
    title text, 
    avg_rating decimal, 
    total_ratings int, 
    genres set<text> 
); 

# shows all ratings for specific movie 
CREATE TABLE ratings_by_movie (
    movie_id int, 
    user_id int, 
    rating decimal, 
    ts int, 
    primary key(movie_id, user_id) 
); 

# show all ratings of specific user 
CREATE TABLE ratings_by_user (
    user_id int, 
    movie_id int, 
    rating decimal, 
    ts int, 
    primary key(user_id, movie_id) 
); 

是否有可能作出以下查询?

  1. 显示影片与大多数评论
  2. 显示所有电影的平均等级> = 4部
  3. 显示100家最佳影片根据他们的收视率
+0

显示查询你迄今为止 – piyushj

+0

1.在PostgreSQL我可以做这样的事情尝试:由(movie_id movierating 组'选择movie_id,计数(等级)为c ) order by c desc limit 1;'但我不知道如何在卡桑德拉的特定列中使用count(列评级 - 在我的情况下) 2.我不知道如何计算Cassandra的平均值。 – KTBFFH

回答

1

卡桑德拉=无连接。你的模型是100%关系。你需要重新考虑Cassandra。我建议你看看这些幻灯片。他们深入研究如何为cassandra建模。此处还有一个涵盖该主题的网络研讨会。但停止考虑外键和连接表,因为如果你需要关系cassandra不是工作的工具。

但是为什么?

因为那么您需要检查一致性并执行关系数据库所做的其他许多事情,因此您将失去cassandra提供的性能和可伸缩性。

我该怎么办?

DENORMALIZE!一张桌子上有很多数据?但是桌子会有太多列! 那么? Cassandra可以处理表格中的大量列。

有关详情,请:How to do a join queries with 2 or more tables in cassandra cql

+0

谢谢你的回答!所以我的查询不可能以我创建我的表的方式(不使用Spark)? – KTBFFH