2017-10-30 8 views
1

にテーブルを作成し、ルックアップテーブルとして使用するcassandraを作成します。私はデータベースにたくさんのURLを持っていて、URL文字列の代わりにIDを格納したいと思っています。だから私のアプローチは、2つの列:id(int)とurl(テキスト)を持つテーブルにURLを格納することです。cassandraでルックアップテーブルを作成するには

私の問題は、のurlフィールドとidフィールドのインデックスが必要だということです。

最初のインデックスは新しいulrs進行中に使用される(したがって、データベース内のURLのidを見つける。)と第2のインデックスは(idのurlを取得する)データを表示する時に使用されます。

私はどのようにそれをのcassandraに実装できますか?

CREATE TABLE urls_table(
    id int PRIMARY KEY, 
    url text 
    ); 

をした後、第2列にインデックスを作成します:

答えて

0

あなたはこのようなあなたのテーブルを作成することができますが、パーティション・キーの上に照会しているので、

create index urls_table_url on urls_table (url); 

あなたの最初のクエリが満たされています。 urlカラムにインデックスを作成して以来、2番目は満足です。

+1

注意してください、ということ二次索引を使用することは、カーディナリティの高い列では推奨されません。説明については、[このページ](https://docs.datastax.com/en/cql/3.3/cql/cql_using/useWhenIndex.html#useWhenIndex__when-no-index)を参照してください。 – Oresztesz

2

私は、このために2つの別々のテーブル作成することをお勧め:これらのテーブルへの挿入をバッチで実行する必要があります

CREATE TABLE id_url (id int primary key, url text); 

CREATE TABLE url_id (url text primary key, id int); 

を:

BEGIN BATCH 
    INSERT INTO id_url (id, url) VALUES (1, '<url1>'); 
    INSERT INTO url_id (url, id) VALUES ('<url1>', 1); 
APPLY BATCH 
+0

それでは、私の質問は、2番目のテーブルまたは2番目のインデックスを作成する方が良いのでしょうか? あなたは何をお勧めしますか? –

+0

どちらがあなたに適しているかを判断することができます。両方のトピックを読むことができます。 https://pantheon.io/blog/cassandra-scale-problem-secondary-indexesとhttps://dba.stackexchange.com/questions/136640/why-does-cassandra-recommend-against-creating-an-index- on-high-cardinality-colum – Horia

+0

また、2つの異なるテーブルがある場合は、IDを取得するために完全なURLを知る必要があることに言及する価値があります。索引を使用すると、LIKEを使用して照会できます。これを行うには、異なるオプションでインデックスを作成する必要があります。この読書はhttp://www.tsoft.se/wp/2016/08/12/sql-like-operation-in-cassandra-is-possible-in-v3-4/ – Horia

関連する問題