2016-06-07 47 views
1

我的查詢是爲特定考試獲得特定學生的分數。對於卡桑德拉表的設計,選項1,複合分區鍵 - 行搜索VS.列搜索

CREATE TABLE student_score (
    student_name text, 
    exam_name text, 
    score int, 
    exam_time timeuuid 
    PRIMARY KEY (exam_name,student_name) 
) 
WITH CLUSTERING ORDER BY (student_name DESC); 

EXAM_NAME將分區鍵,並且所有學生將成爲廣排。

選項2,

CREATE TABLE student_score (
    student_name text, 
    exam_name text, 
    score int, 
    exam_time timeuuid 
    PRIMARY KEY ((exam_name,student_name)) 
) 

EXAM_NAME和student_name一起形成分區鍵,因此不存在寬的行。

選項1是標準方式。但選項2有什麼問題?

回答

2

選項2沒有問題,但選項2只能使用exam_name和student_name一起查詢。

如果有更多的學生出現在特定考試中,選擇一將面臨數據分佈問題,即數據不會均勻分佈。

如果多名同名學生出現同一考試,兩種方法都會面臨問題。

+0

Tks。假設是學生姓名的唯一性。是的,選項1將有潛在的熱點問題。除了查詢的where子句的區別外,還有什麼優點和缺點?像存儲,查詢速度等 – Hammer

+0

yes查詢速度肯定會增加,因爲數據不會像選項1那樣被過濾掉。選項2將創建類似於RDMS行的結構 –