2017-05-18 7 views
0

私はグーグルで、IN句を持つカサンドラでは性能上の理由から望ましくないと考えられることを知りました。私はCassandra IN句単一パーティションで

create table Genre (
    genre_id bigint, 
    movie_id bigint, 
    primary key (genre_id, movie_id) 
); 

のようなテーブルを持っており、

select * from Genre where genre_id = 1 and movie_id IN (1, 2, 3); 

ようなクエリを記述する場合

は、これはまだ悪いと考えているのですか?私は、単一のパーティション(genre_id)を使用しているので、IN節はパフォーマンスに悪影響を与えてはならないと感じています。カサンドラは自分で句で、そのノードと、フィルタに照会する必要がありますので、ノードがデータを持っているカサンドラを教えているので、クエリで

答えて

1

単一パーティションは
良いと考えられています。

すべてのフィルタリングが単一のノードにあり、コーディネータ・ノードが完全な結果を待つため、タイムアウトが発生する可能性があるため、in節を小さくしてください。

0

私の意見では、それは...一般的に、あなたのリストを短く(例えば10個の要素)保つ限り、あなたは安全です。

要素を追加すると、クエリーの実行時間が増え、最終的にタイムアウトになり、コーディネーターが増えます(すべての結果をクライアントに送信する前に保存する必要があります)。

IN句で1つの値でフェッチするレコードが多い場合(たとえBLOBが長いなど)、2つのIN句クエリでもパフォーマンスが低下する可能性があります。

関連する問題