修改你的表的主鍵的定義,並添加username
作爲聚集關鍵字:
CREATE TABLE user_by_company (
company text,
username text,
email text,
PRIMARY KEY (company,username)
);
這將強制唯一性,以及回報所有的用戶名特定公司。此外,您的結果集將按照username
的升序排序。
數據將通過節點上的公司名稱進行分區。如果一個公司有很多用戶,而另一個公司則很少。數據將以非平衡的方式分區
這就是你必須自己計算出來的餘額。 Cassandra中的PRIMARY KEY定義是數據分發和查詢靈活性之間的一種交換。除非company
的基數非常低(如單個數字),否則不必擔心在集羣中創建熱點。另外,如果某個特定的公司變得太大,您可以使用稱爲「bucketing」的建模技術。如果我要「桶」你user_by_company
表,我會首先添加company_bucket
列,並將它作爲附加(複合)分區鍵:
CREATE TABLE user_by_company (
company text,
company_bucket text,
username text,
email text,
PRIMARY KEY ((company,company_bucket),username)
);
至於放什麼成桶,它是由您。也許這特定的公司有東,西的位置,所以這樣的事情可能工作:
INSERT INTO user_by_company (company,company_bucket,username,email)
VALUES ('Acme','West','Jayne','[email protected]');
這裏的缺點是,你將不得不提供company_bucket
每當查詢該表。但如果公司應該變得太大,這是一個可以幫助你的解決方案。
我想你想要的是'PRIMARY KEY(公司,用戶名)' – Ralf
不是一個好主意,因爲數據將通過節點上的公司名稱進行分區。如果一個公司有很多用戶,而另一個公司則很少。數據將以非平衡的方式分區 – farhawa
那麼你的查詢模式是什麼?您可以在公鑰和用戶名中包含公鑰。或電子郵件。這真的取決於你的查詢模式。 – Ralf