2017-01-07 94 views
0

我想在卡桑德拉設計一些列家族,但我對主/分區鍵有一些懷疑。
我想是這樣的:卡桑德拉,分區/主鍵:分區和約束

  • 數據分佈均勻集羣
  • 周圍最小化分區的讀取數量

我知道,這些目標是可以實現的,通過選擇合適的分區/主鍵,但是假設選擇的分區/主鍵允許在你的colum-family中有無效的數據,你會怎麼做?

假設我有以下科拉姆-FAMILY:

CREATE TABLE group (
    groupname text, 
    username text, 
    PRIMARY KEY (groupname, username)) 

假設一個用戶名必須屬於只在一組,與此主鍵,我可以實現(有一些假設)之前的目標,但是無法避免將用戶名放在多個組中。

我可以簡單地假設列族中的內容還是避免插入無效數據的方法?

+0

這是不可能的c在Cassandra中將RDBMS相當於一個「約束」。如果您需要確保無效數據未寫入,則需要在應用程序級別檢查該數據。 – Aaron

回答

2

聲明與用戶名作爲主鍵的表將確保只有一個用戶名與組的關係存在:

CREATE TABLE group (username text, groupname text, PRIMARY KEY (username)); 

隨着lightweight transactions可以防止更新到用戶的組:

INSERT INTO group (username, groupname) VALUES ('joe', 'wheel') IF NOT EXISTS; 

如果您希望按組查詢,請創建物化視圖:

CREATE MATERIALIZED VIEW usersbygroup AS 
    SELECT groupname, username FROM group 
PRIMARY KEY (groupname, username); 
+0

在這一天,我試着告訴我,這似乎是一個很好的解決方案,謝謝! – LolloFake