2016-12-28 8 views
2

私はこのようなテーブルを持っている:クエリーを効率的に実行するために、CassandraでALLOW FILTERINGを使用していますか?

CREATE TABLE IF NOT EXISTS Posts (
    idObject int, 
    objectType text, 
    idParent uuid, 
    id uuid, 
    idResolution uuid, 
    PRIMARY KEY ((idObject, objectType, idParent), id) 
); 

は今、次のクエリを見てみましょう:

SELECT * FROM POSTS WHERE idobject = 1 AND objectType = 'COURSE' AND idParent = 00000000-0000-0000-0000-000000000000 AND idResolution = 00000000-0000-0000-0000-000000000000 ALLOW FILTERING 

は今パーティション・キーは完全には知られているので、私はALLOW FILTERINGを使用している場合があるように起こっていますフィルタリングは既知の単一パーティションで実行されるため、パフォーマンス上の問題はありますか?

+0

idResolution列のセカンダリ索引を追加することは、パフォーマンスの観点からALLOW FILTERINGに代わる良い方法です。 –

答えて

2

特定のパーティション内にいくつの行があり、複数のSSTableファイルにまたがっているかによって異なります。しかし、あなたが言ったように、このクエリは1つのノードに限定されていることが保証されているので、大丈夫かもしれません。

私はcasandra-stressでテストしたいと思います。そうすれば、クエリの待ち時間がアプリケーションで受け入れ可能かどうかを知ることができます。

+0

ありがとう@Aaron。このクエリが単一のノードで制限されるという事実にコメントできますか?私によれば、完全なパーティションキーは制約されているので、それはすべきです。 – Ashutosh

2

大規模なパーティションでは、DataStaxドライバページングAPIを使用する方がよいでしょう。 https://docs.datastax.com/en/developer/java-driver/2.1/manual/paging/

巨大なパーティションには、要求されている無限のサイズのアプリケーション関連の問題がある可能性があります。安全で、ページを張ってください。

+0

ありがとうパトリック!したがって、私がページングを使用すると、このクエリのパフォーマンスは問題ありません。 – Ashutosh

+0

パフォーマンスは、フェッチするページサイズに関連し、パーティションサイズ全体には関係しません。それを考えると、はるかに優れたパフォーマンスが得られるはずです。つまり、パフォーマンスチューニングの考慮事項としてフェッチサイズに細心の注意を払う必要があります。 –

関連する問題