2013-10-24 241 views
8

我剛剛在cassandra數據模型上觀看了this youtube video of Patrick McFadin瞭解卡桑德拉複合鍵

有一個表,如下所示:

create table user_activity_history { 
    username varchar, 
    interaction_date varchar, 
    activity_code varchar, 
    detail varchar, 
    PRIMARY KEY((username,interaction_date),interaction_time) 
); 

爲什麼是主鍵((username,interaction_date),interaction_time)。 與(username,interaction_date,interaction_time)有什麼不同?

+0

您能添加一個鏈接到Patrick McFadin的視頻嗎? – lorcan

+0

已添加http://www.youtube.com/watch?v=HdJlsOZVGwM&feature=share&list=PLqcm6qE9lgKJzVvwHprow9h7KMpb5hcUU –

回答

13

其差異與表格的partition_key有關。典型地,在一個PRIMARY KEY第一元件也是分區鍵 - 此定義的數據的物理位置的簇中,例如,通過使用以下內容:插入到表

PRIMARY KEY(username,interaction_date,interaction_time) 

數據將被劃分(位於物理地)根據username,而通過使用以下:

PRIMARY KEY((username,interaction_date),interaction_time) 

它將根據username,interaction_date組合來分配。後一種方案的優點是,與單個username相關的數據可以存儲在羣集中的節點之間。

上有CREATE TABLE datastax的CQL文件在partition_keys更多的細節:

當您使用複合主鍵卡桑德拉對待在定義分區鍵並將該行的所有列聲明的第一列在同一個物理節點上。當您使用複合分區鍵時,Cassandra將嵌套括號中的列視爲分區鍵,並將行的列存儲在多個節點上。您使用額外的一組括號來聲明覆合 分區鍵,以定義哪些列對數據進行分區。