2016-05-16 285 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