如果在我的cassandra CF中,RowKey是(a,b,c),並且我的數據高度傾斜於一個存在的基數,比如說只有一個。如果我的複製因子是1,是否將整個數據駐留在我的cassandra集羣的單個節點上?在Cassandra中的分區鍵
此外,如果該節點關閉,我會得到什麼異常?
如果在我的cassandra CF中,RowKey是(a,b,c),並且我的數據高度傾斜於一個存在的基數,比如說只有一個。如果我的複製因子是1,是否將整個數據駐留在我的cassandra集羣的單個節點上?在Cassandra中的分區鍵
此外,如果該節點關閉,我會得到什麼異常?
如果您只有一個分區鍵和RF 1,那麼如果該行所經過的節點已關閉,您將無法訪問您的數據。你會得到一個不可用的例外。
Primary Key ((a),b,c)
或Primary Key (a,b,c)
意味着只有a
確定該數據駐留在哪個節點。
Primary Key ((a,b),c)
意味着您使用的是組合鍵,並且a
和b
的組合決定了節點所在的位置。
Primary key ((a,b,c))
表示a
,b
和c
的完整組合用於決定正確的節點。
所有不在第一組內部括號中的變量充當集羣密鑰,並確定排在行內的數據的排序順序,但不確定該行放置在哪個節點上。
感謝RussS的回答。在這種情況下,整個數據會駐留在一個節點上嗎?行密鑰的'b'和'c'不會在決定數據傳輸到哪個節點時發揮任何作用? – 2014-12-02 07:04:03
已更新的答案。只有部分複合分區鍵會影響節點的位置。 – RussS 2014-12-02 15:52:00
我不知道你的模式。如果您發佈與您的問題相關的CQL DDL和cassandra.yaml配置,該解決方案將很清晰。假設,如果你的集羣有4個複製因子爲1的節點(節點A,B,C,D),把分區器作爲任何分區器,並且你的模式有些像下面這樣想,你可以參考答案。
CREATE TABLE demotable(
a text,
b text,
c text,
d text,
PRIMARY KEY(a,b,c)
);
在上述架構中,分區鍵是a
,聚集鍵是b
。對於每個插入,分區鍵將確定要插入的行的位置。讓我們假設,節點A持有分區鍵範圍0-25,節點B持有分區鍵範圍26-50,節點C持有分區鍵範圍51-75,節點D持有分區鍵> 76的範圍。考慮下面的插入語句,
insert into demotable (a,b,c,d) values ('value1','value100','value101','value102','value103');
insert into demotable (a,b,c,d) values ('value1','value200','value201','value202','value203');
insert into demotable (a,b,c,d) values ('value1','value300','value301','value302','value303');
insert into demotable (a,b,c,d) values ('value2','value400','value401','value402','value403');
前三查詢有一個分區鍵value1
和第四查詢有一個分區鍵value2
。如果散列值爲value1
爲12(僅舉例),則這三行將進入Node A
。如果value2
的散列值是29(僅舉例而言),則該行將轉到Node B
。
If that node is down, What exception will i get?
讓我們考慮一下,如果節點A是向下和節點剩下的就是。
select * from demotable where a='value1'
將不會工作,你會得到Unavailable Exception
但是,因爲它駐留在節點B
不幸的是,select * from demotable
也將不會工作會工作。因爲在節點A中可能有一些記錄。因此,如果任何一個節點關閉,複製爲1,則選擇所有查詢將無法工作。
你是什麼意思的行鍵。你的意思是主鍵?發佈表的CQL DDL可能會更清晰。 – Raedwald 2014-12-02 08:13:08