2016-10-26 73 views
0

我最近開始使用Cassandra - 我來自傳統的關係數據庫背景,所以它肯定有點不同。我習慣總是做的一件事就是爲每一行生成一個唯一的ID(OID等)。所以,對於我在Cassandra中創建的表格,我一直在每個表格上放置一個UUID列並生成一個UUID。我的問題是......這真的是「必要的」嗎?我沒有使用UUID作爲分區密鑰的一部分,所以目前我沒有真正使用它,但這是一個艱難的習慣。一些建議會很棒!Cassandra中的UUID真的「有必要嗎?」

回答

2

確實沒有必要。但在某些情況下,在表中引入UUID可能會很有用。 例如假設你有一個像表:

CREATE TABLE user (
    id uuid, 
    name text, 
    login text, 
    day_of_birth date 
) PRIMARY KEY (login); 

此表,您可以通過登錄查詢用戶。 現在想象你還想按名稱查詢用戶。 當然,如果這種查詢只運行幾次,您可以創建一個SECONDARY INDEX。 但是,如果你想擁有良好的讀取性能,您可以通過具有象表結構非規範化的數據:

CREATE TABLE user (
    id uuid, 
    name text, 
    login text, 
    day_of_birth date 
) PRIMARY KEY (id); 

CREATE TABLE user_by_name (
    id uuid, 
    name text 
) PRIMARY KEY (name); 

CREATE TABLE user (
    id uuid, 
    login text 
) PRIMARY KEY (login); 

但這種結構,必須插入和更新在所有3個表來保持數據。相反,創建其他兩個表中您可以使用MATERIALIZED VIEW保持只有一個表的讓利卡桑德拉維持觀點:

CREATE TABLE user (
    id uuid, 
    name text, 
    login text, 
    day_of_birth date 
) PRIMARY KEY (id); 

CREATE MATERIALIZED VIEW user_by_name 
AS 
SELECT * 
FROM user 
WHERE id IS NOT NULL 
    AND name IS NOT NULL 
PRIMARY KEY ((name), id); 

CREATE MATERIALIZED VIEW user_by_login 
AS 
SELECT * 
FROM user 
WHERE id IS NOT NULL 
    AND login IS NOT NULL 
PRIMARY KEY ((login), id); 
+0

哦,這就是爽!我不知道卡桑德拉有物化視圖。這實際上會幫助我在一個場景中出現巨大的局面,我認爲我將不得不創建一個新表格。謝謝! – cloudwalker

+0

我忘了確切地說物化視圖只支持cassandra> = 3.0 –

相關問題