2017-11-20 9 views
1

私はCassandraで作業を始めました。 私は二次キーの概念と少し混乱しています。カッサンドラのテーブルにセカンダリインデックスを作成する

私が理解している定義からは、ソートされていないテーブルの非キー属性に対するインデックス付けはセカンダリインデックスです。

だから、私はこの

CREATE INDEX IF NOT EXISTS user_name_index ON userschema.user (name) 

のようなインデックスを作成した場合、これは二次的指標でなければなりませんので、このテーブルに

CREATE TABLE IF NOT EXISTS userschema.user (id int,name text, address text, company text, PRIMARY KEY (id, name)) 

を持っています。

しかし、私の要件は、カラムname、id、companyを含むインデックスを作成することです。

Cassandraでこのようなセカンダリインデックスを作成するにはどうすればよいですか?

私はthisというリンクを持っていますが、この短いものを定義していますが、どのようにこれらの二次インデックスがテーブルではありませんか?

上記のユーザーテーブルは、実際の例ではありません。私はカサンドラ3.0.9

+1

は何のクエリあなたがこのテーブルに対して実行しようとしている私を修正?クエリは通常、データモデルの決定に役立ちます。 PSAとして – mikea

+0

ちょっと:ここで二次インデックスを避けたいと思うかもしれません。それらは非常に特殊なユースケース(カーディナリティー=ノード数)のために作られています。多くのリレーショナルDBの人の索引のようなものはありません。代わりに、新しいテーブルを作成して両方に書き込みます。 –

答えて

1

idnameを使用しています

はすでに主キーの一部です。セカンダリインデックスが定義されると、そうクエリはあなたが会社のコラム

CREATE INDEX IF NOT EXISTS company_index ON userschema.user (company) 

にセカンダリインデックスを作成することができます

SELECT * FROM table WHERE id=1 
SELECT * FROM table WHERE id=1 and name='some value' 
SELECT * FROM table WHERE name='some value' ALLOW FILTERING (This is inefficeint) 

に動作します以下

は今、それが主キーと一緒にwhere句で使用することができます。

SELECT * FROM table WHERE id=1 and name='some value' and company='some value' 

しかし、SELECT * FROM table WHERE company='some value' ALLOW FILTERINGは非常に非効率的ですが、

セカンダリインデックスを作成する前にWhen to use secondary index in cassandra

0

あなたは主に言及、我々は非主キーを持つクエリを実行するための仮想テーブルを作成したマテリアライズド・ビュー、に焦点を当ててきたリンクを見てみましょう。 また、テーブルの作成で既に定義した主キーに副キーを作成しているようです。セカンダリインデックスは非プライマリキーである必要があります。それが作成されます

:今、このhttps://docs.datastax.com/en/cql/3.3/cql/cql_using/useSecondaryIndex.html

を参照してくださいセカンダリIndexes-についての明確なアイデアを持っている

、セカンダリインデックスのための代替方法

1.Materializedビューの長所と短所古い仮想テーブルと元のテーブルの古いプライマリ・キーと新しいマテリアライズド・テーブルの新しい仮想プライマリ・キーを使用して、仮想テーブルでクエリを実行する必要があります。元の古い表のデータ変更の変更は、マテリアライズド表に反映されます。マテリアライズド・テーブルを削除すると、gcc_gracesecondsが864000(10日間)のデフォルトの墓石としてデータが作成されます。マテリアライズド・テーブルを削除しても元のテーブルには影響しません。

2.ALLOWフィルタリング:

それは非常に非効率的であるとは全く待ち時間が高くなり、性能が低下するようにフィルタリングできるように使用することをお勧めされていません。

あなたはより多くの情報が必要な場合は、あまりにもこのリンクを参照してくださいHow do secondary indexes work in Cassandra?

は私が間違っている場合

関連する問題