2016-10-26 3 views
0

私は最近Cassandraを使い始めました。私は伝統的なリレーショナルデータベースのバックグラウンドから来ています。だから間違いありません。私がいつもやっていることの一つは、各行(OIDなど)に固有のIDを生成することです。だから、私がカッサンドラで作成している私のテーブルでは、私はそれぞれにUUIDカラムを入れてUUIDを生成しています。私の質問は...これは本当に「必要なのですか?私はパーティションキーの一部としてUUIDを使用していないので、現時点では何も使用していませんが、壊すのは難しい習慣です。いくつかのアドバイスは素晴らしいでしょう!カサンドラの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つのテーブルに挿入して更新する必要があります。他の2つのテーブルを作成する代わりに、MATERIALIZED VIEWを使用して1つのテーブルのみを保持することができます。

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でのみサポートされているということを忘れてしまいました –

関連する問題