確實沒有必要。但在某些情況下,在表中引入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);
哦,這就是爽!我不知道卡桑德拉有物化視圖。這實際上會幫助我在一個場景中出現巨大的局面,我認爲我將不得不創建一個新表格。謝謝! – cloudwalker
我忘了確切地說物化視圖只支持cassandra> = 3.0 –