在卡桑德拉
问题描述:
某些查询我创建的数据库“电影”三名族:在卡桑德拉
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)
);
是否有可能作出以下查询?
- 显示影片与大多数评论
- 显示所有电影的平均等级> = 4部
- 显示100家最佳影片根据他们的收视率
答
卡桑德拉=无连接。你的模型是100%关系。你需要重新考虑Cassandra。我建议你看看这些幻灯片。他们深入研究如何为cassandra建模。此处还有一个涵盖该主题的网络研讨会。但停止考虑外键和连接表,因为如果你需要关系cassandra不是工作的工具。
但是为什么?
因为那么您需要检查一致性并执行关系数据库所做的其他许多事情,因此您将失去cassandra提供的性能和可伸缩性。
我该怎么办?
DENORMALIZE!一张桌子上有很多数据?但是桌子会有太多列! 那么? Cassandra可以处理表格中的大量列。
有关详情,请:How to do a join queries with 2 or more tables in cassandra cql
+0
谢谢你的回答!所以我的查询不可能以我创建我的表的方式(不使用Spark)? – KTBFFH
显示查询你迄今为止 – piyushj
1.在PostgreSQL我可以做这样的事情尝试:由(movie_id movierating 组'选择movie_id,计数(等级)为c ) order by c desc limit 1;'但我不知道如何在卡桑德拉的特定列中使用count(列评级 - 在我的情况下) 2.我不知道如何计算Cassandra的平均值。 – KTBFFH